执行segue时查看出现两次

时间:2014-10-13 10:00:58

标签: ios objective-c uitableview segue

我的应用有问题。我正在使用导航控制器和TableView。 所以在我的第一个View中我有一个名为propTableView的TableView,它是一个属性列表。当我单击一个单元格时,它会将我带到另一个ViewController,其中包含另一个名为propDetailTableView的TableView。我从PropViewControllerPropDetailViewController执行了一次Segue:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *sectionTitle = [aromaPropSectionTitles objectAtIndex:indexPath.section];
    NSArray *sectionProp = [propData objectForKey:sectionTitle];
    propName = [sectionProp objectAtIndex:indexPath.row];
    [self performSegueWithIdentifier:@"PropDetail" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"PropDetail"]) {
        PropViewController *propView = segue.destinationViewController;
        propView.title = propName;
        SQLmanager *sqlManager = [[SQLmanager alloc] initDatabase:@"prop_max.sqlite3"];
        NSString *propRequest = [NSString stringWithFormat:@"SELECT id_prop FROM prop_max WHERE prop_name_fr LIKE '%@'", propName];
        NSLog(@"propRequest = %@", propRequest);
        NSString *propId = [sqlManager getString:propRequest];
        NSLog(@"propId = %@", propId);
    }
}

现在我只需更改导航栏的标题。但这种行为并不正常。它不显示带有新标题的PropDetailViewController,而是显示带有先前标题的新PropDetailViewController(如果它是我第一次点击它没有显示标题的单元格),然后显示PropDetailViewController标题。 这不会有问题,但是当我点击左上角的Back时,它会带我回到带有旧标题的PropDetailViewController,我必须再次点击{{1 }}返回Back

我点击一个单元格(我之前点击了Anti-Douleur,但现在我选择了Actif-Cosémtique): Actif Cosmétique

显示如下: Old Title

然后一秒钟后: Good Title

1 个答案:

答案 0 :(得分:1)

抱歉,我知道问题所在。

就是这么简单:

prepareForSegue在设置UIView之前运行。

它只涉及视图控制器,而不是视图。

你要做的是......

在segue期间设置一些信息......

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  {
  if ([[segue identifier] isEqualToString:@"idUber"])
    {
    Uber *uber = [segue destinationViewController];
    uber.classnameToUse = .. whatever ...;
    }
  }

然后在那个其他类......稍后,当viewDidLoad运行时,然后使用该信息。

注意 - viewDidAppear 可能更合适,具体取决于您的具体情况

-(void)viewDidLoad
  {
  [self loadThisMainSection:self.classnameToUse];

  // note that back during the segue you have CORRECTLY SET .classnameToUse
  // that was a long time ago.  but we only use it now.
  }

就这么简单!

你必须在每一种情况下都这样做。

你最终得到的变量名称如“whenYouCanUseThisValue”....

在您的情况下,您需要一个名为:

的属性
@property (strong) NSString *useThisTitleLaterWhenYouAreLoading;

BTW不要忘记,如果它是一个非类属性,那就是“assign”

@property (assign) CGPoint afterLoadingHereIsThePosition;
@property (assign) CGFloat onceYouLoadUseThisAlpha;