gpt4 book ai didi

ios - 如何访问不同 View Controller 中的属性?

转载 作者:行者123 更新时间:2023-11-29 02:21:32 30 4
gpt4 key购买 nike

我有两个 Storyboard,每个 Storyboard都有自己各自的 View Controller ,但我需要根据第一个 View Controller 中按下的按钮更改第二个 Storyboard的外观。

在我的第一个 View Controller 中:

// First view controller .h
#import <UIKit/UIKit.h>
#import "SecondViewController.h"

@interface FirstViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *LevelOneButton; // tag 0
@property (strong, nonatomic) IBOutlet UIButton *LevelTwoButton; // tag 1

-(IBAction)selectLevel:(UIButton *)sender; // both buttons connected to this method
@property (assign, nonatomic) int levelSelect;

@end

然后在第一个.m文件中:

//FirstViewController.m
-(IBAction)selectLevel:(UIButton *)sender {
if (sender.tag == 0) {
_levelSelect = 0;
}
if (sender.tag == 1) {
_levelSelect = 1;
}
}

此代码工作正常,但问题出现在我拥有的 secondViewController 中。当我尝试访问 SecondViewController 中的 levelSelect 属性时,出现错误“在‘FirstViewController’类型的对象上找不到属性‘levelSelect’”或“意外的标识符 levelSelect”或这些行中的某些内容。我已经尝试了所有我能想到的事情以及我在 StackOverflow 上发现的与此相关的每个问题,但都没有解决问题。有人知道我做错了什么吗?

最佳答案

您应该在推送或继续时在第二个 View Controller 上设置属性。

所以在你的第一个 View Controller 中它应该看起来像这样:

#import "ViewController.h"
#import "SecondViewController.h"
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIButton *levelOne;
@property (strong, nonatomic) IBOutlet UIButton *levelTwo;
@property (assign, nonatomic) int selectedLevel;
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.levelOne.tag = 1;
self.levelTwo.tag = 2;
}

- (IBAction)selectLevel:(UIButton *)sender
{
if (sender.tag == 1) {
self.selectedLevel = 1;
} else {
self.selectedLevel = 2;
}

[self performSegueWithIdentifier:@"pushToSecond" sender:self];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *dest = segue.destinationViewController;
dest.levelSelect = self.selectedLevel;
}

@end

现在,当在 SecondViewController 上调用 viewDidLoad 时,将设置该属性,您可以使用它。像这样:

#import "SecondViewController.h"

@interface SecondViewController ()
@property (strong, nonatomic) IBOutlet UILabel *levelLabel;

@end

@implementation SecondViewController

- (void)viewDidLoad
{
[super viewDidLoad];
self.levelLabel.text = [@(self.levelSelect) stringValue];

}

@end

快速编辑,如果你不使用 segues,你可以通过手动推送来做同样的事情。看起来像:

- (IBAction)selectLevel:(UIButton *)sender
{
if (sender.tag == 1) {
self.selectedLevel = 1;
} else {
self.selectedLevel = 2;
}

SecondViewController *secondVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"second"];
secondVC.levelSelect = self.selectedLevel;
[self.navigationController pushViewController:secondVC animated:YES];
}

关于ios - 如何访问不同 View Controller 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078900/

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