0

iPhone の [設定] に表示されているのとまったく同じように、複数のテーブルが分離されたアプリケーションがあります。このラベルに表示される値を追加したいと思います。たとえば、右側に項目があり、左側に値が表示されている Wi-Fi または Bluetooth の設定に見られるのとまったく同じです。これどうやってするの?

設定.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

設定.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 への結果を取得し、この設定オブジェクトにデータを入力します....

-(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;
}

ページが最初にロードされるとき...

UI をプルダウンして cellFroRowAtIndexPath 関数を再度起動した後...

Selected_value を AppDelegate.h に合成し、これを使用して、ユーザーがクリックしたセルの値を格納します。

@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];
}

下にスクロールしないと、ログ ウィンドウに「Select value: Yes 6」と表示されます。テーブルにレンダリングされた最後の値は、最終的に表示されるものです。これを行うためのより良い方法があることは知っていますが、方法がわかりません。アイデア/提案?

4

1 に答える 1

3

UITableViewCellStyleValue1 のスタイルでテーブル ビュー セルをセットアップする必要があります。これは、黒のタイトルと青の値を表示するために設定アプリで使用されるタイプです。

セルのタイトルは titleLabel で設定され、右側の値はセルの detailTextLabel プロパティを使用して設定されます。

UITableViewCell と initWithStyle:reuseIdentifier: メソッドのドキュメントを参照してください。

于 2012-10-10T23:12:30.293 に答える