我有一个应用程序,其中几个表分开,就像在iPhone上的设置中看到的一样。我想在此标签中添加一个值,就像在设置Wi-Fi或蓝牙中看到的那样,右边有项目,左边会显示一个值。我怎么能这样做?
Setting.h
@interface Setting : NSObject {
NSString *_settingsID;
NSString *_catalogID;
NSString *_category;
NSString *_facings;
NSString *_quantity;
}
@property (nonatomic, retain) NSString *settingsID;
@property (nonatomic, retain) NSString *catalogID;
@property (nonatomic, retain) NSString *category;
@property (nonatomic, retain) NSString *facings;
@property (nonatomic, retain) NSString *quanity;
- (Setting *)initWithName:(NSString *)settingsID desc:(NSString *)category CategoryID:(NSString *)catalogID Facings:(NSString *)facings Quantity:(NSString *)quantity;
@end
Setting.m
@implementation Setting
@synthesize settingsID = _settingsID;
@synthesize catalogID = _catalogID;
@synthesize category = _category;
@synthesize facings = _facings;
@synthesize quanity = _quantity;
- (Setting *)initWithName:(NSString *)settingsID desc:(NSString *)category CategoryID:(NSString *)catalogID Facings:(NSString *)facings Quantity:(NSString *)quantity {
if ((self = [super init])) {
self.settingsID = settingsID;
self.catalogID = catalogID;
self.category = category;
self.facings = facings;
self.quanity = quantity;
}
return self;
}
@end
接下来在我的connectionDidFinishLoading中,我将JSON调用的结果带到了我的WebAPI,并填充了这个Setting对象....
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
self.settings = [NSMutableArray array];
NSError *error = nil;
id result = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&error];
if ([result isKindOfClass:[NSArray class]]) {
for (NSDictionary *item in result) {
NSString *settingsID = [item objectForKey:@"ID"];
NSString *category = [item objectForKey:@"Category"];
NSString *categoryID = [item objectForKey:@"CatalogID"];
NSString *facings = [item objectForKey:@"Facings"];
NSString *quantity = [item objectForKey:@"Quantity"];
Setting *setting = [[Setting alloc] initWithName:settingsID desc:category CategoryID:categoryID Facings:facings Quantity:quantity];
[self.settings addObject:setting];
}
}
for (Setting *item in self.settings) {
NSString *frozen = @"Frozen";
BOOL res = [frozen isEqualToString:item.category];
if (res == TRUE) {
**NSLog(@"Original Value: %@, Bool Value: %@", item.facings, item.facings.boolValue == false ? @"No" : @"Yes");
NSLog(@"Original Value: %@, Bool Value: %@", item.quantity, item.quantity.boolValue == false ? @"No" : @"Yes");
// Frozen
appDelegate.frozen_facing_value = item.facings.boolValue == false ? @"No" : @"Yes";
appDelegate.frozen_quantity_value = item.quantity.boolValue == false ? @"No" : @"Yes";**
}
NSString *fruit = @"Fruit";
res = [fruit isEqualToString:item.category];
if (res == TRUE) {
// Fruit
}
NSString *salads = @"Salads";
res = [salads isEqualToString:item.category];
if (res == TRUE) {
// Salads
}
NSString *vegetables = @"Vegetables";
res = [vegetables isEqualToString:item.category];
if (res == TRUE) {
// Vegetables
}
}
NSLog(@"Finished..");
finished = TRUE;
}
我在AppDelegate.h中合成了我的selected_value,并使用它来存储用户点击的单元格的值。
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
NSString *_selected_value;
**NSString *_frozen_facing_value;**
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (nonatomic, retain) NSString *selected_value;
**@property (nonatomic, retain) NSString *frozen_facing_value;**
@end
AppDelegate.m
这是我的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *result = nil;
if ([tableView isEqual:self.myTableView]){
static NSString *CellIdentifier = @"CellIdentifier";
result = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (result == nil){
result = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
NSMutableArray *sectionArray = [self.arrayOfSections objectAtIndex:indexPath.section];
result.textLabel.text = [sectionArray objectAtIndex:indexPath.row];
NSString *res = (NSString *)result.textLabel.text;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if ([[self tableView:tableView titleForHeaderInSection:indexPath.section] isEqualToString:@"Frozen"]) {
if ([res isEqualToString:FACINGS]) {
**result.detailTextLabel.text = appDelegate.frozen_facing_value;**
} else if ([res isEqualToString:QUANTITY]) {
result.detailTextLabel.text = @"Yes 2";
}
} else if ([[self tableView:tableView titleForHeaderInSection:indexPath.section] isEqualToString:@"Fruit"]) {
if ([res isEqualToString:FACINGS]) {
result.detailTextLabel.text = @"No 3";
} else if ([res isEqualToString:QUANTITY]) {
result.detailTextLabel.text = @"Yes 4";
}
} else if ([[self tableView:tableView titleForHeaderInSection:indexPath.section] isEqualToString:@"Salads"]) {
if ([res isEqualToString:FACINGS]) {
result.detailTextLabel.text = @"No 5";
} else if ([res isEqualToString:QUANTITY]) {
result.detailTextLabel.text = @"Yes 6";
}
} else if ([[self tableView:tableView titleForHeaderInSection:indexPath.section] isEqualToString:@"Vegetables"]) {
if ([res isEqualToString:FACINGS]) {
result.detailTextLabel.text = @"No 7";
} else if ([res isEqualToString:QUANTITY]) {
result.detailTextLabel.text = @"Yes 8";
}
}
appDelegate.selected_value = result.detailTextLabel.text;
result.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return result;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableArray *sectionArray = [self.arrayOfSections objectAtIndex:indexPath.section];
NSLog(@"Select value: %@", appDelegate.selected_value);
appDelegate.selectedSetting = [[NSString alloc] initWithFormat:@"Select value: %@ for %@, in section: %@", @"Test", [sectionArray objectAtIndex:indexPath.row], [self tableView:tableView titleForHeaderInSection:indexPath.section]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
SettingsViewController *settings = [[SettingsViewController alloc] initWithNibName:@"Settings" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:settings animated:YES];
}
在我的日志窗口中,我看到“选择值:是6”,除非我向下滚动。呈现给表的最后一个值是我最终看到的。我知道有更好的方法可以做到这一点,我只是不知道如何做到这一点。想法/建议?
答案 0 :(得分:3)
您需要使用UITableViewCellStyleValue1样式设置表格视图单元格。这是“设置”应用中用于显示黑色标题和蓝色值的类型。
使用titleLabel为单元格设置标题,使用单元格的detailTextLabel属性设置右侧的值。
查看UITableViewCell的文档和initWithStyle:reuseIdentifier:方法。