0

セル内のボタンにタグを設定する際に助けを求めたいと思います。これは、私が投稿した以前へのリンクを含む質問です: iOS Using NSDictionary to load data into section and rows

ただし、データを動的に渡すことはできましたが、各行の更新ボタンはデータを取得できず、セクション内のいずれかの行が選択されたときに各セクションの同じ本のタイトルしか検出できませんでした。

これまで読んだ内容によると、ボタンがリサイクルされているため、どの本が適切に選択されているかを検出できません。タグを設定しようとしました:

cell.renewButton.tag = indexPath.row;

私のコードは今どのように見えるか:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"Cell";
UserCustomCell *cell = (UserCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.bookTitle.frame = CGRectMake(12, 0, 550, 40);

if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"UserCustomCell" owner:self options:nil];
    cell = userCustomCell;
    self.userCustomCell = nil;
    cell.renewButton.tag = indexPath.row;
}

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    cell.bookTitle.frame = CGRectMake(12, 0, 550, 40);
    cell.renewButton.frame = CGRectMake(600, 14, 68, 24);
}
[cell.renewButton useBlackActionSheetStyle];

//########## ここから編集開始 dataSource = [[NSMutableDictionary alloc] init]; // これは ivar である必要があります

for (NSDictionary *rawItem in myArray) {
    NSString *date = [rawItem objectForKey:@"date"]; // Store in the dictionary using the data as the key

    NSMutableArray *section = [dataSource objectForKey:date]; // Grab the section that corresponds to the date

    if (!section) { // If there is no section then create one and add it to the dataSource
        section = [[NSMutableArray alloc] init];
        [dataSource setObject:section forKey:date];
    }

    [section addObject:rawItem]; // add your object
}
self.dataSource = dataSource;
//NSLog(@"Data Source Dictionary: %@", dataSource); 

NSArray *sections =[[dataSource allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSString *sectionTitle = [sections objectAtIndex:indexPath.section];

NSArray *items = [dataSource objectForKey:sectionTitle];

NSDictionary *dict = [items objectAtIndex:indexPath.row];
cell.bookTitle.text = [dict objectForKey:@"name"];
cell.detail.text = [NSString stringWithFormat:@"Due Date: %@ Due Time: %@", 
                    [dict objectForKey:@"date"], [dict objectForKey:@"time"]];


cell.renewButton.tag = indexPath.row;
return cell;   

}

しかし、まったく機能しません。どんな提案にも感謝します:)ありがとうございます!!

PS: xcode の私のコピーは更新されません。バージョン 4 までのみです。タグのステータスを DataModel に格納することに言及している人を見ましたが、それは新しいバージョンでのみ利用可能です。:)

4

2 に答える 2

2

ボタンタグはリサイクル元のセルと同じであるため、使用できません。代わりに、を使用して現在のindexPath行を判別し、それを直接使用してください。ボタンタグを通過する必要はありません。

于 2012-07-28T10:23:13.710 に答える
1

cell.renewButton にセレクター メソッド (ボタンのタップ時にトリガーされるメソッド) が割り当てられているのを確認できませんでした。

[cell.renewButton addTarget:self action:@selector(renewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

また、タグ番号 0 はほとんどタグを付けていないようなものなので、オフセットを使用してタグ番号を指定します。tableView の最初の行は indexPath.row = 0 になります。

あなたのコードの上に、

#define OFFSET 100 /* Or any number greater than 0 */

cellForRowAtIndexPath では、

...
[cell.renewButton addTarget:self action:@selector(renewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
cell.renewbutton.tag = indexPath.row + OFFSET;
...

renewButtonPressed メソッドでは、

-(void)renewButtonPressed:(id)sender
{
    tappedNum = [sender tag] - OFFSET;
    /* do your stuff */
}

tappedNum は、0 から始まる、ボタンがタップされた行を示します。

于 2012-08-01T09:33:44.833 に答える