Как мне разделить разделы в UITableView?

#iphone #objective-c #xcode #ios4

#iPhone #objective-c #xcode #ios4

Вопрос:

как я могу разделить разделы в tableview? ниже приведен код, который я пытался разделить, но не смог получить разделы..

 #import "ipapbatch3ViewController.h"  

@implementation ipapbatch3ViewController    

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section  
{  
    NSInteger numberofrows=5;    
    return numberofrows;  

}  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath    
{
    NSArray *a = [NSArray arrayWithObjects:@"rams",@"balu",@"praveen",@"sagar",@"faizan",nil];    
    UITableViewCell * r = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];    
    [r autorelease];  

    r.textLabel.text=[a objectAtIndex:[indexPath row]];  

                         return r;  
                         }  
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView      
{    
    NSInteger sc = 2;      
    return sc;    

}    




@end  
  

Ответ №1:

Это все в cellForRowAtIndexPath, вот небольшой пример:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath    
{
    UITableViewCell * r = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

    if (indexPath.section == 0) {
        NSArray *a = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",nil];    
        r.textLabel.text = [a objectAtIndex:indexPath.row];  

    } else {
        NSArray *b = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];    
        r.textLabel.text = [b objectAtIndex:indexPath.row];  

    }

    return r;  
}
  

Комментарии:

1. Ну, в примере показано, как разделить таблицу на разделы, но это плохое управление памятью. Вы создаете тонны автоматически выпущенных массивов. Эти массивы должны быть созданы один раз и освобождены при освобождении.

2. @Cyprian, Оператор спросил, как разделить на разделы, я принял его код. Я думаю, вы не понимаете, что такое автоматически выпущенный объект. Вы не являетесь владельцем автоматически выпущенных объектов до тех пор, пока вы их не сохраните и, следовательно, нигде не освободите.

3. @Nick Weaver если вы правильно прочитали мой комментарий, я говорю, что вы освобождаете массив, если создаете его явно при инициализации. Исправление неаккуратного кода с помощью неаккуратного кода заставляет людей задавать больше вопросов позже, поэтому полезно указывать им правильное направление на всем пути.

4. @Cyprian этот код близок к коду OP, который, как следует из его имени, кажется новичком в objective-c. Таким образом, полное переписывание кода до неузнаваемости для новичка не помогает. Это его темп, не твой.

5. @Ник Уивер, я знаю, что ты помог и твой код был подходящим для его понимания, я просто высказал точку зрения. Удачного просмотра.

Ответ №2:

Ваша главная проблема в приведенном выше коде заключается в том, что вы никогда не указываете, в какой раздел вставить новую ячейку, и, таким образом, все они попали в первую. Загляните в метод cellForRowAtIndexPath, вам нужно указать, что вновь созданная ячейка переходит в определенный раздел.

Ознакомьтесь с примерами программ, предоставляемых Apple.

Комментарии:

1. @toddler в objective-c : вам следует просто пометить это сообщение как ответ для записи, если это решило проблему, и, возможно, вы просто покажете нам решение.