我的应用有问题。我正在使用导航 Controller 和 TableView。
所以在我的第一个 View 中,我有一个名为 propTableView
的 TableView,它是一个属性列表。当我单击一个单元格时,它会将我带到另一个 ViewController 和另一个名为 propDetailTableView
的 TableView。我执行从 PropViewController
到 PropDetailViewController
的 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
,我必须点击一个第二次 Back
返回到 PropViewController
。
我点击一个单元格(我之前点击的是Anti-Douleur,但现在我选择了Actif-Cosémtique):
它显示这个:
然后一秒钟之后:
最佳答案
抱歉,我知道问题出在哪里。
就这么简单:
prepareForSegue 在设置 UIView 之前运行。
它只涉及 View Controller ,不涉及 View 。
你要做的是...
在 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.
}
就这么简单!
你必须在每个 segue 情况下都这样做。
你最终会得到像“whenYouCanUseThisValue”这样的变量名......
在您的情况下,您需要一个名为的属性:
@property (strong) NSString *useThisTitleLaterWhenYouAreLoading;
顺便说一句,如果它是非类属性,请不要忘记它是“赋值”
@property (assign) CGPoint afterLoadingHereIsThePosition;
@property (assign) CGFloat onceYouLoadUseThisAlpha;
关于ios - 执行 segue 时 View 出现两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337304/