Как обрабатывать две настраиваемые ячейки в одном UITableView с помощью действий UISegmentedControl?

Привет, я новичок в 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», но не отображать пользовательскую ячейку в представлении таблицы. В чем я ошибся в этом коде. Пожалуйста, помогите мне. Заранее спасибо.

Вот ответ на мою проблему, я не реализовал это

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

person user5691142    schedule 12.02.2016    source источник
comment
Отладьте его и посмотрите, входите ли вы внутрь if (value1 == 0) &if (value1 == 1)   -  person Vishal Sharma    schedule 12.02.2016
comment
Проверено, но не работает. Отображается так 2016-02-12 18:51:17.725 Tugain[15084:222927] Examid: 1 (lldb) po value1 1   -  person user5691142    schedule 12.02.2016
comment
myTableView.dataSource = сам; myTableView.delegate = сам; [myTableView reloadData]; эти коды должны быть в viewdidload, а не внутри метода cellForRow.   -  person RJV Kumar    schedule 13.02.2016
comment
Ok. я удалил это, но не работает @RJVKumar   -  person user5691142    schedule 13.02.2016


Ответы (1)


вам нужно сначала зарегистрировать перо ячейки в загрузке viewDid

[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;


} 
person Nitin Singh    schedule 12.02.2016
comment
Как? можете дать пример r ссылку! - person user5691142; 13.02.2016