0

これが初心者の質問として出くわした場合はお詫び申し上げます。UITableViewにセクションとカスタムセルフォーマットを入力しようとしています。

ViewControl.xibにcustomCellを作成しました。これは、メインビューに沿って配置され、次のようになります 。customCell image

どの行にあるかに応じて、別のクラスのメソッドを使用して値をロードするための辞書があります。行1にある場合は、アイテム1などの詳細をロードします。

これは私が使用しているコードです:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell"];

    // assigns current row's labels
    NSArray * customCellText = [Model cellText:indexPath.row];
    dinnerItem.text = customCellText[0];
    dinnerDescription.text = customCellText[1];
    dinnerTime.text = customCellText[2];

    cell = customCell;
    return cell;
}

そして、これは現在生成されているものです:

iPhoneシミュレータのスクリーンショット

私が抱えている問題:

  • すべての行を入力するのではなく、最後の行だけを入力します。
  • 表示されている行をクリックするだけのように見えますが、それでも「クリック」するのではなく、選択されたままになります。
  • すばやく上下にドラッグするとクラッシュします。

私はそれが細胞を再描画/移入する方法と関係があると思いますか?

前もって感謝します!SineTwo

編集、明確化のためのコードの追加:

ViewController.m

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        return [Model countKeys];
    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [Model rowsInSection:section];
    }

    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
// slightly crap code, this is initiated in viewDidLoad and is an array created by a method in Model.m. Only looks for keys and returns an array.
        return headerKeys[section];
    }

Model.m

+(NSArray *)headerKeys
{
    NSArray *headerKeys = [[NSArray alloc] init];
    headerKeys = [timerDictionary allKeys];
    NSLog(@"All keys: %@", headerKeys);
    return headerKeys;
}

+(NSArray *)customCellText
{
    NSArray *customCellText = [[NSArray alloc]initWithObjects: @"dinnerItemText", @"dinnerDescriptionText", @"01:00", nil];
    return customCellText;
}

+(NSInteger)rowsInSection:(NSInteger)sectionNumber
{
    NSArray *keyContent = [[NSArray alloc] init];
    keyContent = [timerDictionary objectForKey:dictionaryKeys[sectionNumber]];
    NSLog(@"current section[%i]: %i", sectionNumber, [keyContent count]);
    return [keyContent count];
}

+(NSArray *)cellText:(NSInteger)rowNumber
{
    // display all dictionary keys, dictionaryKeys[x] will give back the specific category
    dictionaryKeys = [timerDictionary allKeys];

    // displays contents of first key in dictionary
    NSArray *keyContent = [[NSArray alloc] init];
    keyContent = [timerDictionary objectForKey:dictionaryKeys[0]];

    // creates an array with all items within the selected key
    NSArray *keyItems = [[NSArray alloc] initWithArray:keyContent[rowNumber]];
    return keyItems;
}
4

2 に答える 2

0

私は次のように言うことができます:

それだけを行う場合:
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell"];

iOS 5より前では、これはセルを取り戻すことを保証するものではありません。iOS5より前は、次のこと行う必要があります。

NSString * cellIdentifier = [NSString stringWithFormat:@ "I%d-%d"、indexPath.section、indexPath.row];

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"customCell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    // assigns current row's labels
    NSArray * customCellText = [Model cellText:indexPath.row];
    dinnerItem.text = customCellText[0];
    dinnerDescription.text = customCellText[1];
    dinnerTime.text = customCellText[2];

    cell = customCell;
    return cell;
}

iOS5 / 6を使用している場合、これらの行はもう必要ありません。

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

ただし、tableViewのセットアップでは次のメソッドを使用する必要があります。

registerClass:forCellReuseIdentifier:  (available in iOS6 and later)
registerNib:forCellReuseIdentifier: (available in iOS5 and later)

あなたの問題を解決することを望んでいるだけです:
行を忘れないでください[...](cell == nil)[...]

于 2013-03-04T20:49:35.617 に答える
-1

まず、メソッドをこれに変更します!nilセルが次のとおりであるかどうかを確認する必要があります。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"customCell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        // assigns current row's labels
        NSArray * customCellText = [Model cellText:indexPath.row];
        dinnerItem.text = customCellText[0];
        dinnerDescription.text = customCellText[1];
        dinnerTime.text = customCellText[2];

        cell = customCell;
    }


    return cell;
}
于 2013-03-04T20:32:05.933 に答える