我是iOS新手,
我正在使用动态行和部分
开发UITableView
我想显示所有"今天"第一部分的数据,"明天"在其他部分和"星期日"在其他部分等等...
我尝试的代码是,
这是我的数组:
{
"callbackSlotId": "1234-1234-3214-1233",
"callbackSlotName": "10:00-10:30",
"day": "today",
"availablenow": true
},
{
"callbackSlotId": "1234-1234-3214-1234",
"callbackSlotName": "11:00-11:30",
"day": "today",
"availablenow": false
},
{
"callbackSlotId": "1234-1234-3214-1235",
"callbackSlotName": "10:30-11:00",
"day": "today",
"availablenow": false
},
{
"callbackSlotId": "1234-1234-3214-1236",
"callbackSlotName": "10:30-11:00",
"day": "tomorrow",
"availablenow": false
},
{
"callbackSlotId": "1234-1234-3214-1237",
"callbackSlotName": "10:30-11:00",
"day": "tomorrow",
"availablenow": false
},
{
"callbackSlotId": "1234-1234-3214-1241",
"callbackSlotName": "10:30-11:00",
"day": "Sunday",
"availablenow": false
}
...
...
...
使用此代码,它会在多个部分中显示所有数据:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [Array count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [Array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.textLabel.text=[Array objectAtIndex:indexPath.row];
return cell;
}
任何人都可以帮助我吗? 感谢您阅读
答案 0 :(得分:0)
为了解决这种情况,您可以先根据Array
变量的值将day
分成不同的子阵列。
为此,您可以使用NSPredicate
假设你的主Array
有3个不同的值 - today, tomorrow, Sunday
那么你的数组将有3个子数组
数组[0]将包含day
作为today
的所有对象
数组[1]将包含day
为tomorrow
的所有对象,依此类推
现在您可以通过以下代码
使用它- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [Array count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[Array objectAtIndex:section] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.textLabel.text=[[Array objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
return cell;
}
答案 1 :(得分:0)
未经测试,但您可以使用我的代码来分离您的数组
NSMutableArray *sections = [[NSMutableArray alloc] init];
NSMutableArray *elementsInSection = [[NSMutableArray alloc] init];
for (NSDictionary *dict in Array) {
NSString *day = [dict objectForKey:@"day"];
if (![sections containsObject:day]) {
[sections addObject:day];
NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObject:dict];
[elementsInSection addObject:arr];
} else {
NSMutableArray *arr = [elementsInSection objectAtIndex:[sections indexOfObject:day]];
[arr addObject:dict];
[elementsInSection setObject:arr atIndexedSubscript:[sections indexOfObject:day]];
}
}
您的tableview数据源现在变为
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [sections count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [elementsInSection count];
}
答案 2 :(得分:0)
它适合我,请在 cellForRowAtIndexPath 方法中试用。
NSDictionary *dict = [_arrMytrips objectAtIndex:indexPath.row];
NSString *day = [dict objectForKey:@"day"];
if ([day isEqualToString:@"today"] && indexPath.section == 0) {
cell.textLabel.text = [dict objectForKey:@"day"];
cell.detailTextLabel.text = [dict objectForKey:@"day"];
}else{
cell.textLabel.text = [dict objectForKey:@"day"];
cell.detailTextLabel.text = [dict objectForKey:@"day"];
}
希望它对你有所帮助。谢谢。
答案 3 :(得分:0)
尝试这样的事情:
- (void)viewDidLoad {
[super viewDidLoad];
arrayMain = @[yourArray];
arraySection = [NSMutableArray array];
[arrayMain enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
int flag = 0;
for(NSDictionary *secObj in arraySection) {
if ([secObj[@"day"] isEqualToString:obj[@"day"]]) {
++flag;
break;
}
}
if (flag == 0) {
[arraySection addObject:obj];
}
}];
}
然后:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return arraySection.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSMutableArray *arrayOfRows = [NSMutableArray array];
[arrayMain enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj[@"day"] isEqualToString:arraySection[section][@"day"]]) {
[arrayOfRows addObject:obj];
}
}];
return arrayOfRows.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
NSMutableArray *arrayOfRows = [NSMutableArray array];
[arrayMain enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj[@"day"] isEqualToString:arraySection[indexPath.section][@"day"]]) {
[arrayOfRows addObject:obj];
}
}];
NSDictionary *objectToShow = arrayOfRows[indexPath.row];
cell.textLabel.text = objectToShow[@"callbackSlotName"];
return cell;
}
通过此代码,您无需计算任何内容,只需将其放入代码中并相应地更改值即可。如果您有任何疑问,请随时提出。