加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 我可以用视图控制器的指定的初始化器使用segues

发布时间:2020-12-16 07:52:50 所属栏目:百科 来源:网络整理
导读:我是故事板的新手,我已经设置了一个从一个按钮到一个视图控制器.该视图控制器是一个自定义子类SFListViewController,它具有指定的初始化器initWithList :. 使用指定的初始化程序是正确初始化视图控制器的唯一方法.然而,当使用segue时,将不会调用指定的初始化
我是故事板的新手,我已经设置了一个从一个按钮到一个视图控制器.该视图控制器是一个自定义子类SFListViewController,它具有指定的初始化器initWithList :.

使用指定的初始化程序是正确初始化视图控制器的唯一方法.然而,当使用segue时,将不会调用指定的初始化程序(显然).

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"Show List"]) {
    SFListViewController *listViewController = segue.destinationViewController;
    // ????
  }
}

执行时如何使segue调用指定的初始化程序?

解决方法

据我所知,这是不可能的,因为故事板框架简单地在您在Interfacebuilder中定义的类中调用alloc和init.另外,segue的destinationViewController属性是只读的,所以你不能简单地替换现有的ViewController.

使用Storyboarding的唯一方法可能是创建一个包装类,内部实例化具有所需属性的SFListViewController,然后作为代理对象,从而将viewDid ***和viewWill ***方法传播到包装类,也将包装的VC的视图以只读视图属性返回…你会得到想法.

在这种情况下,通常有许多替代方法初始化UIViewController:

>有一个选项来指定可以用于初始化的“用户定义的运行时属性”.
>覆盖prepareForSegue:方法,就像您尝试的那样,在您的根ViewController中,并在其中执行“post-alloc-init-initialisation”.
>如果最坏的情况是最坏的,你可以回到IBAction,以便能够自己初始化ViewController.

我希望这有帮助.

编辑:我可以验证代理方法是否有效,因为我刚刚遇到与ABPeoplePickerNavigationController类似的问题,这种方法工作得很好.因为我们在我们的故事板中设置了这个事情,请注意,为了进行初始配置(而不是一些init方法),你必须使用awakeFromNib.

这是我的包装类的代码:

#import "PeoplePickerViewControllerWrapper.h"

@implementation PeoplePickerViewControllerWrapper

@synthesize ppvc = _ppvc;  // This is the object I'm proxying (The proxyee so to speak)
@synthesize delegate = _delegate;

- (void)awakeFromNib
{
        self.ppvc = [[ABPeoplePickerNavigationController alloc] init ];
        self.ppvc.peoplePickerDelegate = self;
        self.ppvc.addressBook = ABAddressBookCreate(); 
        self.ppvc.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
}

#pragma mark - View lifecycle

- (void)loadView
{
    [super loadView];
    [self.ppvc loadView];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.ppvc viewDidLoad];
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.ppvc viewWillAppear:animated];
}

-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    [self.ppvc viewDidDisappear:animated];
}

-(UIView *)view{
    return self.ppvc.view;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    [self.ppvc viewDidUnload];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读