【问题标题】:How to handle two custom cells in one UITableView with UISegmentedControl Actions?如何使用 UISegmentedControl Actions 在一个 UITableView 中处理两个自定义单元格?
【发布时间】:2016-02-12 11:55:53
【问题描述】:

您好,我是 iOS 和 SO 的新手。我在我的应用程序中面临一个问题,即在一个表格视图中显示两个自定义单元格并选择分段控件。当用户单击分段 = 0 时,它显示一个自定义单元格,分段 = 1 显示第二个自定义单元格。 这是到目前为止我尝试过的代码,

 -(void)callSegmentSelected
{
value1 = (int)segment.selectedSegmentIndex;
if (segment.selectedSegmentIndex == 0)
{
        NSString *urlString = [NSString stringWithFormat:@"http:"url"];
        NSString *jsonString = [NSString stringWithFormat:catid];
        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;
            array =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

            [myTableView reloadData];
        }
        else
        {
            NSLog(@"Error");
        }
}
else if (segment.selectedSegmentIndex == 1)
{
}

这是我的 tableview 委托方法

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return array.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (value1 == 0)
{
static NSString *cellId = @"Cell";
Cell1 * cell = (Cell1 *)[myTableView dequeueReusableCellWithIdentifier:cellId];
        if (cell == nil)
        {
        NSArray *myNib;
        myNib = [[NSBundle mainBundle]loadNibNamed:@"Cell1" owner:self options:nil];
        cell = [myNib lastObject];
}
    cell.examLbl.text = [[array objectAtIndex:indexPath.row]objectForKey:@"examtitle"];
    myTableView.dataSource = self;
    myTableView.delegate = self;
    [myTableView reloadData];

    return cell;
}
else
{
    if (value1 == 1)
    {
        static NSString * cellIdentifier = @"Cell2";
        Cell2 *cell = (ContestRewardCell *)[myTableView dequeueReusableCellWithIdentifier:cellIdentifier];
        if (cell == nil)
        {
            NSArray *myNib;
            myNib = [[NSBundle mainBundle]loadNibNamed:@"cell2" owner:self options:nil];
            cell =[myNib objectAtIndex:0];
        }
        cell.titleLbl.text = [[array objectAtIndex:indexPath.row]objectForKey:@"title"];
        myTableView.dataSource = self;
        myTableView.delegate = self;
        [myTableView reloadData];
        return cell;
    }
}
return nil;
}

在此代码中没有错误,我检查了调试模式数据将进入“cell.examLbl.text”,但未在 tableview 中显示自定义单元格。我在此代码中做错了什么请帮助我任何人。 提前致谢。

这是我的问题的答案,我没有实现这个

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (value1 == 0)
{
    return 102;
}
else if(value1 == 1)
{
    return 193;
}
return 0;
}

【问题讨论】:

  • 调试它看看你是否进去 if (value1 == 0) &if (value1 == 1)
  • 已检查但无法正常工作。它显示如下 2016-02-12 18:51:17.725 Tugain[15084:222927] 检查:1 (lldb) po value1 1
  • myTableView.dataSource = self; myTableView.delegate = 自我; [myTableView 重载数据];这些代码应该在 viewdidload 中,而不是在 cellForRow 方法中。
  • 好的。我删除了它但没有工作@RJVKumar

标签: ios objective-c uitableview uisegmentedcontrol custom-cell


【解决方案1】:

你需要先在 viewDid load 中注册 cell nib

[YourTableView registerNib:[UINib nibWithNibName:@“YourCellNibName” bundle:nil] forCellReuseIdentifier:@“Identifier”];

然后使用 cellForRowAtIndexPath 中的单元格

示例:

-(void)viewDidLoad
{
[super viewDidLoad];
[TableView registerNib:[UINib nibWithNibName:@“MyTableViewCell” bundle:nil]forCellReuseIdentifier:@"cell"];
}


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

 MyTableViewCell *cell = (MyTableViewCell *)[myTableView      dequeueReusableCellWithIdentifier:@"cell”];

 cell.labelTitle=@"cell”;

 return cell;


} 

【讨论】:

  • 怎么样?可以给个例子r链接!
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多