gpt4 book ai didi

ios - 执行 segue 时 View 出现两次

转载 作者:行者123 更新时间:2023-11-29 02:36:09 25 4
gpt4 key购买 nike

我的应用有问题。我正在使用导航 Controller 和 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,我必须点击一个第二次 Back 返回到 PropViewController

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

它显示这个: Old Title

然后一秒钟之后: Good Title

最佳答案

抱歉,我知道问题出在哪里。

就这么简单:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com