1

tableView セルからテキストを読み取ろうとしていますが、prepareForSegue メソッドで、テキストを取得して NSUserDefaults に設定します。ただし、テキストを NSLog すると、NULL が返されます。これは私が試したものです。

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
      {
         NSString *blah = sender.textLabel.text;
         NSLog(@"%@",blah); // It returns NULL no matter what cell is clicked
      }
4

2 に答える 2

2

セルのラベルはビューの一部であるため、使用しないでください。セルは正しいですが、そのビジュアルはprepareForSegue:が呼び出されるまでに破棄される場合があります。

これを行う MVC の方法は、セルの行のデータについて基になるデータ ソースをクエリし、ラベルの代わりにそのデータを使用することです。

つまり、実装のどこかにcellForRowAtIndexPath:次のようなコードがあります。

NSString *labelData = [myDataSource objectAtIndex:indexPath.row];
cell.textLabel.text = labelData;

prepareForSegue:メソッド内でそのコードを複製する必要があります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
{
    NSUInteger row = [self.tableView indexPathForCell:sender].row
    NSString *labelData = [myDataSource objectAtIndex:row];
    NSLog(@"%@", labelData); // This should work
}
于 2013-09-01T23:59:14.860 に答える
0

メソッドでは、に基づいて を何かにtableView:cellForRowAtIndexPath:割り当てます。cell.textLabel.textindexPath

これは次のようになります

id myDomainObject = [self objectAtIndexPath:indexPath];

cell.textLabel.text = myDomainObject.text;

したがって、prepareForSegue で indexPath を取得できれば、ドメイン オブジェクトを取得でき、そこからテキストを取得できます。

あなたtableView:cellForRowAtIndexPath:に会わなければ、これ以上のアドバイスはできません

于 2013-09-02T00:05:01.277 に答える