#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, вам нужно указать, что вновь созданная ячейка переходит в определенный раздел.
Комментарии:
1. @toddler в objective-c : вам следует просто пометить это сообщение как ответ для записи, если это решило проблему, и, возможно, вы просто покажете нам решение.