UITableView
でカスタムセルのNSIndexPath
を取得する必要があります。問題は次のとおりです。editingDidBegin
が私のカスタムセルのUITextField
から呼び出されると、私はUITableViewController
に私のカスタムセルからNSNotification
を送ります。 UITableViewController
ではUITextField
が編集を開始したときにUITableView
のサイズを変更してから、UITextField
が最初のレスポンダであるセルにテーブルビューをスクロールさせます。しかし、UITextField
が編集されているセルのindexPath
を返す方法を知ることはできません。私は非常に多くの方法を試みましたが、それでも動作していません。私は[self.tableV indexPathForSelectedRow]
の行をNSLog
ならば、それは常にだけで、セルに値を与えるも、その限らない0カスタムセルからNSIndexPathを返しますか? (UITableView)
答えて
かかわらず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を取得します。
私はそうのように私の細胞をタグ付けしたい:
/* 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
あなたのgithubプロジェクトは完全に混乱しています。ビルド時に少なくとも20のエラーと警告があります。私の質問に関連するコードをいくつか提供してください。私には50の賞金があります。 – JonasG
- (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;
}
は、この(あなたが下記の前に与えたあなたの答えは)まだ動作しない?:
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"で、コントローラーがテキストフィールドを識別できるのでしょうか?
「フレーム」を取得するのではなく、 – aopsfan