2011-09-08 6 views
6

UITableViewでカスタムセルのNSIndexPathを取得する必要があります。問題は次のとおりです。editingDidBeginが私のカスタムセルのUITextFieldから呼び出されると、私はUITableViewControllerに私のカスタムセルからNSNotificationを送ります。 UITableViewControllerではUITextFieldが編集を開始したときにUITableViewのサイズを変更してから、UITextFieldが最初のレスポンダであるセルにテーブルビューをスクロールさせます。しかし、UITextFieldが編集されているセルのindexPathを返す方法を知ることはできません。私は非常に多くの方法を試みましたが、それでも動作していません。私は[self.tableV indexPathForSelectedRow]の行をNSLogならば、それは常にだけで、セルに値を与えるも、その限らない0カスタムセルからNSIndexPathを返しますか? (UITableView)

+0

「フレーム」を取得するのではなく、 – aopsfan

答えて

14

かかわらず0を返す私のcstomCellクラスで私は[self setSelected:YES]を使用して行を選択して、私のテレビコントローラで:一つの方法はこれですそのtagプロパティ。あなたはこの

NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

ようNSIndexPathを得ることができ、細胞を持っていたら、あなたはあなたがcell.textField.delegate = self;を配置することができ、カスタムセル内のUITextFieldを持っているので、あなたは、この

UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; 

を呼び出すことによって、そのセルを得ることができます

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

データソース方式。そうすることで、カスタムセルにNSNotificationを設定する必要がなくなります。また、これと同じ方法であなたは今、あなたはUITextFieldのデリゲートを設定したことの両方のあなたの細胞にテキストこのcell.textField.tag = indexPath.row;ようなフィールドと、このcell.tag = indexPath.row;

様細胞にタグを付けることができ、あなたは今、あなたのUITableViewControllerクラスでこのメソッドを置くことができ

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];   

} 

上記のUITextFieldデリゲートメソッドは、現在選択しているセルのindexPathを取得します。

+0

私はそれを取得しない、いくつかのコードを提供してください。 2行のコードの間には関係がありません。コードの行をどこに置くか教えてください。 – JonasG

+0

@Maxner私は自分の答えを編集しました。混乱を取り除くための希望。 – ms83

-1

私はそうのように私の細胞をタグ付けしたい:

/* Create a tag based on the section and row of a cell(used to retrive the cell for the beginEditingNextCell method. */ 
-(NSInteger)tagForIndexPath:(NSIndexPath*)path { 
    return path.section * 1000 + path.row + 1; 
} 

他の方法は、カスタムデリゲートを使用してbeginEditingデータを渡すことです、そしてあなたは、あなたのパスを把握するために使用できるセルモデルを含み、どのようにデータを格納しているかによって異なります。

それがこのケースを処理するコードだけでなく、キーボードのためにリサイズし、次の編集可能なセルにタブ移動を持って、私のgithubのプロジェクトをチェックアウト:https://github.com/andrewzimmer906/XCell

+0

あなたのgithubプロジェクトは完全に混乱しています。ビルド時に少なくとも20のエラーと警告があります。私の質問に関連するコードをいくつか提供してください。私には50の賞金があります。 – JonasG

0

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    UITableView *tableView; 
    UITableViewCell* superViewCell = [self returnSuperCellViewOfTextField:textField]; 
    if(superViewCell)[tableView scrollToRowAtIndexPath:[tableView indexPathForCell:superViewCell] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
} 

-(id)returnSuperCellViewOfTextField:(id)viewToCheck 
{ 
    id superView = [viewToCheck superview]; 
    if([viewToCheck isKindOfClass:[UITableViewCell class]] && superView)return superView; 
    else if(([viewToCheck respondsToSelector:@selector(superview)] && superView)) return [self returnSuperCellViewOfTextField:superView]; 
    return nil; 
} 
0
..このコードを試してみてくださいあなたは、各セルに複数のtexfieldsを持っている場合

は、この(あなたが下記の前に与えたあなたの答えは)まだ動作しない?:

UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; 
then once you have the cell you can get the NSIndexPath like this 

NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

あなたはを持っているので、カスタムセルの3210を

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

データソースメソッドに配置することができます。また、この同じメソッドでは、このcell.textField.tag = indexPathのように両方のセルテキストフィールドにタグを付けることができます。行;このcell.tag = indexPath.rowのようなセル。今、あなたはUITextFieldのデリゲートを設定したことを

、あなたは今

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

私は8個の細胞とテーブルビューを持って、各セルに、私は6 texfieldsを持っており、またあなたのUITableViewControllerクラスでこのメソッドを配置することができますtableviewは動的なので、ユーザーはもっと多くのセルを挿入することができます...しかし、私は各テキストフィールドにユーザーが入力したテキストを保存する方法に問題があります。 "cell.textField.tag = indexPath.row"で、コントローラーがテキストフィールドを識別できるのでしょうか?

関連する問題