4

スイッチコントロール付きのテーブルビューがあります。私の問題は、スイッチをクリックしたときに行テーブルIDを取得するにはどうすればよいですか?スイッチの状態は取得できますが、IDは取得できません

これは、スイッチの状態を取得するための私のコードです。

- (void)aggiungiTag:(id)sender {    
    NSLog(@"the tag value is: %d", [sender isOn]);
    return;
}

これは、プッシュスイッチ制御をセルに組み込むための私のコードです。

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    // Configure the cell...
    //inseriamo nelle celle la nostra lista
    cell.textLabel.text = [arrTagResidui objectAtIndex:indexPath.row];

    /*** aggiungo lo switch per i tag ***/
    //lo istanzio e setto la posizione
    UISwitch *switchObj = [[UISwitch alloc] initWithFrame:CGRectMake(1.0, 1.0, 20.0, 20.0)];
    //setto il valore di default
    switchObj.on = NO;
    //setto l'action ed i controlli degli eventi
    [switchObj addTarget:self action:@selector(aggiungiTag:) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
    //aggiungo lo switch alle celle
    cell.accessoryView = switchObj;

    NSInteger row = indexPath.row;
    [arrBoolSwitch insertObject:[NSNumber numberWithBool:NO] atIndex:row]; 
    [switchObj release];
    return cell;
}
4

3 に答える 3

2

それはすべてテーブルやコードなどに依存します...しかし、行を探しているだけの場合、1つのオプションはのtag属性をUISwitchindexPath.row(またはそれを計算できる値)に設定することかもしれません)。何かのようなもの:

[switchObj setTag:indexPath.row];

次に、メソッドに行IDを設定します。

- (void)aggiungiTag:(id)sender {    
    NSLog(@"the tag value is: %d, row is %d", [sender isOn], [sender tag]);
    return;
}

すべては最終目標が何であるか、そしてアプリの他の部分が何をしているかに依存します-しかしそれは安くて簡単です。

于 2010-12-09T19:48:18.067 に答える
2

イベントハンドラーを微調整して、イベントパラメーターを受け入れます。

- (void)aggiungiTag:(id)sender forEvent:(UIEvent*)event {    
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:
     [[[event touchesForView:sender] anyObject] locationInView:self.tableView]];
    // do stuff with indexPath
}

@selectorの署名も変更することを忘れないでください。

[switchObj addTarget:self 
              action:@selector(aggiungiTag::) // <-- two colons now :)
    forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
于 2010-12-09T19:41:31.797 に答える
0

これが実行されたソリューションです!;)

- (void)aggiungiTag:(id)sender {    

    //recupero l'oggetto switch di cui ho bisgno
    UISwitch *theSwitch = (UISwitch *)sender;

    //recupero la cella della tabella sulla quale è posizionato lo switch
    UITableViewCell *cell = (UITableViewCell *)theSwitch.superview;
    UITableView *tableView = (UITableView *)cell.superview;
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];

    NSLog(@"the row is: %d", indexPath.row);
    NSLog(@"the tag value is: %d", [theSwitch isOn])
}

全てに感謝!

于 2010-12-09T23:11:37.087 に答える