0

我有两个视图,变量是从我的 TestViewController 加载的,它是一个 UITableViewController。下面我有部分代码,我相信它会很有用。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selected = [[_sectionsArray objectAtIndex:indexPath.row] objectForKey:@"Section"];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.viewController.detailSec = selected;
    NSLog(@"%@",selected);
}

在我的 ViewController 中,以下代码应该将我的 UILabel 文本更改为我的变量

-(void)setDetailSec:(id)newDetailSec {

    if (_detailSec != newDetailSec) {
        [_detailSec release];
         _detailSec = [newDetailSec retain];
        [self configureView];
    }
    NSLog(@"Step 2 %@",_detailSec);
}


-(void)configureView {
   if (self.detailSec) {
       self.detailLabelChord.text = [_detailSec description];
    NSLog(@"Step 3 %@", _detailSec);
}

如您所见,我添加了 NSLogs 以检查是否调用了 if 函数以及变量是否相应更改并且确实如此!但我的 UILabel 不会改变!

2012-07-18 22:03:26.077 testapp[17332:11303] Step 3 CHS 21.3x3.2
2012-07-18 22:03:26.078 testapp[17332:11303] Step 2 CHS 21.3x3.2
2012-07-18 22:03:26.079 testapp[17332:11303] Step 1 CHS 21.3x3.2

有什么想法或建议吗?如果您需要更多信息,我不知道是否可以上传我的项目。

先感谢您

4

1 回答 1

0

而不是这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selected = [[_sectionsArray objectAtIndex:indexPath.row] objectForKey:@"Section"];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.viewController.detailSec = selected;
    NSLog(@"%@",selected);
}

做这个:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selected = [[_sectionsArray objectAtIndex:indexPath.row] objectForKey:@"Section"];
    self.viewController.detailSec = selected;
    NSLog(@"%@",selected);
}

viewController每次选择一行时,都不需要从 nib 初始化一个新的。你已经有了viewController。当您创建一个新控制器时,viewController您正在调用setDetailSec这个尚未显示的新控制器。你不是在viewController你可以看到的UILabel.

于 2012-07-18T21:44:44.943 回答