xcode iPhone UITableView 创建部分

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6416082/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 21:18:34  来源:igfitidea点击:

iPhone UITableView Create Sections

iphoneobjective-cxcodeuitableview

提问by Courtney Stephenson

I am trying to create more sections in my UITableView and I cannot seem to figure it out. I am looking to move the "View full website" and "Video" links into their own section and change the height of those cells to 75. I can create a new cell, but I cannot figure out how to position it properly.

我正在尝试在 UITableView 中创建更多部分,但似乎无法弄清楚。我希望将“查看完整网站”和“视频”链接移动到它们自己的部分,并将这些单元格的高度更改为 75。我可以创建一个新单元格,但我不知道如何正确定位它。

    typedef enum { SectionHeader, SectionDetail } Sections;
    typedef enum { SectionHeaderTitle, SectionHeaderDate, SectionHeaderURL,            SectionHeaderEnclosure } HeaderRows;
    typedef enum { SectionDetailSummary } DetailRows;

    @implementation MediaDetailTableViewController

    @synthesize item, dateString, summaryString, teachings;

    #pragma mark -
    #pragma mark Initialization

    - (id)initWithStyle:(UITableViewStyle)style {
    if ((self = [super initWithStyle:style])) {

    }
    return self;
    }

    #pragma mark -
    #pragma mark View lifecycle

    - (void)viewDidLoad {

    // Super
    [super viewDidLoad];

    // Date
    if (item.date) {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
        [formatter setTimeStyle:NSDateFormatterMediumStyle];
        self.dateString = [formatter stringFromDate:item.date];
        [formatter release];}
    // Summary
    if (item.summary) {
        self.summaryString = [item.summary stringByConvertingHTMLToPlainText];
    } else {
        self.summaryString = @"[No Summary]";
        }
        }

    #pragma mark -
    #pragma mark Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 2;
    }


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    switch (section) {
        case 0: return 4;
        default: return 1;
    }
        }

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // Get cell
    static NSString *CellIdentifier = @"CellA";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    // Display
    cell.textLabel.textColor = [UIColor blackColor];
    cell.textLabel.font = [UIFont systemFontOfSize:15];
    if (item) {

        // Item Info
        NSString *itemTitle = item.title ? [item.title stringByConvertingHTMLToPlainText] : @"[No Title]";

        // Display
        switch (indexPath.section) {
            case SectionHeader: {

                // Header
                switch (indexPath.row) {
                    case SectionHeaderTitle:
                        cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
                        cell.textLabel.text = itemTitle;
                        break;
                    case SectionHeaderDate:
                        cell.textLabel.text = dateString ? dateString : @"[No Date]";
                        break;
                    case SectionHeaderURL:
                        cell.textLabel.text = @"View Full Website";
                        cell.textLabel.textColor = [UIColor blackColor];
                        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
                        cell.imageView.image = [UIImage imageNamed:@"Safari.png"];
                        break;
                    case SectionHeaderEnclosure:
                        cell.textLabel.text = @"Video";
                        cell.textLabel.textColor = [UIColor blackColor];
                        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
                        cell.imageView.image = [UIImage imageNamed:@"Video.png"];
                        break;
                }
                break;

            }
            case SectionDetail: {

                // Summary
                cell.textLabel.text = summaryString;
                cell.textLabel.numberOfLines = 0; // Multiline
                break;

            }
        }
    }

    return cell;

}

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == SectionHeader) {

        // Regular
        return 34;

    } else {

        // Get height of summary
        NSString *summary = @"[No Summary]";
        if (summaryString) summary = summaryString;
        CGSize s = [summary sizeWithFont:[UIFont systemFontOfSize:15] 
                       constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT)  // - 40 For cell padding
                           lineBreakMode:UILineBreakModeWordWrap];
        return s.height + 16; // Add padding

    }
    }

    #pragma mark -
    #pragma mark Table view delegate

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // Open URL
    if (indexPath.section == SectionHeader && indexPath.row == SectionHeaderURL) {
        if (item.link) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:item.link]];
        }
    }

    if (indexPath.section == SectionHeader && indexPath.row == SectionHeaderEnclosure) {  
        if (item.enclosures) {  
            for (NSDictionary *dict in item.enclosures){ 

                NSString *baseUrl = @"http://www.calvaryccm.com";
                NSString *url = [dict objectForKey:@"url"];
                NSString *finalURL;
                finalURL = [baseUrl stringByAppendingFormat:url];
                NSLog(@" finalUrl is : %@",finalURL);
                NSLog(@" Url is : %@",url);

                MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:finalURL]];


                // Register to receive a notification when the movie has finished playing.  
                //[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];  

                if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) {  
                    // Use the 3.2 style API  
                    moviePlayer.controlStyle = MPMovieControlStyleDefault;  
                    moviePlayer.shouldAutoplay = YES;  
                    [self.view addSubview:moviePlayer.view];  
                    [moviePlayer setFullscreen:YES animated:YES];  
                } else {  
                    // Use the 2.0 style API  
                    moviePlayer.movieControlMode = MPMovieControlModeHidden;  
                    [moviePlayer play];  
                }           
            }  
        }  
    } 

    // Deselect
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

    }

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
    // Return YES for supported orientations
    return YES;
    }


    #pragma mark -
    #pragma mark Memory management

    - (void)dealloc {
    [dateString release];
    [summaryString release];
    [item release];
    [teachings release];
    [super dealloc];
    }


    @end

Here is a picture for reference:

这是一张图片供参考:

Moving tableview sections

移动 tableview 部分

Thank you for all your help!

谢谢你的帮助!

回答by pgb

You should start by changing the appropriate methods in the UITableView's data source.

您应该首先更改UITableView的数据源中的适当方法。

From your code, you would need to change it to something like this:

从您的代码中,您需要将其更改为如下所示:

typedef enum { SectionHeader, SectionMiddle, SectionDetail } Sections;

#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 3;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section    {
    // Return the number of rows in the section.
    switch (section) {
        case 0: return 2;
        case 1: return 2;
        default: return 1;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // snip
    switch (indexPath.section) {
        case SectionHeader:
           // snip
           break;
        case SectionMiddle:
           // snip
           break;
        case SectionDetail:
           // snip
           break;
    }
}

回答by Legolas

Use

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 3;
}