如何在一个包含选择的表视图中维护两个自定义单元格?

时间:2016-01-28 10:52:53

标签: ios objective-c iphone uitableview

我是iOS新手。我有一个UIViewController,其中添加了一个tableview和分段控件。如果我按分段值= 0,我想要第一个自定义单元格加载图像和标题和段值= 1,我想显示我的第二个自定义单元格UICollectionView加载图像和标题,怎么能我这样做请帮帮我?以下是我的一些代码:

MenuViewController.m

-(void)callSegmentSelected
{
value=(int)segment.selectedSegmentIndex;
if (segment.selectedSegmentIndex == 0)
{
NSString *urlString = [NSString stringWithFormat:@"http://API"];
NSString *jsonString = @"";
NSData *myJSONData =[jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
[body appendData:[NSData dataWithData:myJSONData]];
[request setHTTPBody:body];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
if(str.length > 0)
{
    NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]);
    listBannerArray =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    [progressHud hide:YES];
    [self.tableViewContest reloadData];
}
else
{
    NSLog(@"Error");
}
}

这是我的CellForRowAtIndexPath

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *cellId = @"Cell";
 MenuTableViewCell *cell = (MenuTableViewCell *)[tableViewContest dequeueReusableCellWithIdentifier:cellId];
 if (cell == nil)
{
NSArray * myNib;
myNib =[[NSBundle mainBundle]loadNibNamed:@"MenuTableViewCell" owner:self options:nil];
cell = (MenuTableViewCell *)[myNib lastObject];
}
if(value == 0)
{
@try
{
    if((NSNull *)[[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"listbanner"] != [NSNull null])
    {
        if([[[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"listbanner"] length] > 0)
        {
            NSURL *imageURL = [NSURL URLWithString:[[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"listbanner"]];
            [cell.listBanner sd_setImageWithURL:imageURL
                           placeholderImage:[UIImage imageNamed:@"profilepic_bg"]];
        }
        else
        {
        }                
    }
}
@catch (NSException *exception)
{
}
if((NSNull *)[[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"examtitle"] != [NSNull null])
{
    if([[[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"examtitle"] length] > 0)
    {
        cell.examTitle.text = [[listBannerArray objectAtIndex:indexPath.row] objectForKey:@"examtitle"];
    }
    else
    {
        cell.examTitle.text = @"Data Error";
    }
}
else
{
    cell.examTitle.text = @"Data Error";
}
}

点击SegmentIndex = 0屏幕时

enter image description here

点击SegmentIndex = 1时这样

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以创建enum来区分细分操作。

步骤1:为选择创建枚举。

typedef enum {
   OPTION_FIRST = 0,
   OPTION_SECOND
} SEGMENT_SELECTION;

第2步:在你的MenuViewController.m

1)创建SEGMENT_SELECTION

的实例
  

@property(nonatomic)SEGMENT_SELECTION segmentSelection;

2)将值分配给segmentSelection

-(void)callSegmentSelected
{
  if (segment.selectedSegmentIndex == 0)
    segmentSelection = OPTION_FIRST
  else
    segmentSelection = OPTION_SECOND

    [self.tableViewContest reloadData];//For update the content in tableview
}

步骤3:在CellForRowAtIndexPath上编写以下代码

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if(segmentSelection == OPTION_FIRST) {
      //Load the content of FIRST segment action 
    }
    else {
      //Load the content of SECOND segment action
    }
}

希望它适合你。