2011-03-16 9 views
1

私はTableViewを持っています。私はUITableViewCellを持っています。 UItableViewControllerでは私はUITextFieldを持っています。 TextFieldをタップするときのアプリケーションです。それが開いています。 しかし、メソッド - tableView:willSelectRowAtIndexPath: - tableView:didSelectRowAtIndexPath:行に直接タップしないので、動作しません。 現在の行のindexPath.rowをどのように知ることができますか?UITableView with Custom UITableViewCell

答えて

0

cellForRowAtIndexPath方法では、それを設定することで、あなたのUITextFieldに現在の行を割り当てるには、indexPath.rowの値にタグプロパティをだ

[yourTextfield setTag:indexPath.row]; 

テキストフィールドが編集を終えたとき、あなたはそれのTagプロパティとあなたを読み出すことができますやり直し

+1

タグは別のタグを使用する必要があるか、テーブルビューに複数のセクションがある場合のみ問題です。 – GendoIkari

+0

良い点。 @Anton:これを考慮する必要があります。しかし、私には、彼が複数のセクションを持っているのか、何かのためにタグプロパティを使っているのかどうかは明らかではありませんでした。 –

+0

ありがとうございました。できます! – Anton

0

あなたがいずれかを実行できます。

  1. サブクラスUITextFieldですし、それにindexPathプロパティを与えます。 cellForRowAtIndexPathでは、textFieldを作成してセルに追加するときにプロパティを割り当てます。次に、textFieldデリゲートメソッドでは、正しいindexPathにアクセスできます。このメソッドでは、必要に応じて他の情報をtextFieldに関連付けることもできます。

  2. はUicontrolののアクションメソッドを使用します。

    - (void)textFieldDidChangeValue:(id)sender withControlEvents:(UIEvent *)event { 
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: 
         [[[event touchesForView:sender] anyObject] locationInView:self.tableView]]; 
    
        //Do whatever you need to, now that you have the indexPath 
    } 
    

    このメソッドは、サブクラスに必要なくなります。

+0

ご協力いただきありがとうございます。 – Anton

0

tableViewとtextFieldへの参照がある限り、このようなことはうまくいくはずです。セルも表示する必要があります:

UITableViewCell* tvc = (UITableViewCell*)[textField superview]; 
while (tvc != nil && ![tvc isKindOfClass: [UITableViewCell class]]) 
    tvc = [tvc superview]; 

NSIndexPath* ip = [tableView indexPathForCell: tvc];