gpt4 book ai didi

ios - 从 ViewController 调用 nib 方法

转载 作者:行者123 更新时间:2023-11-29 01:22:14 27 4
gpt4 key购买 nike

请告诉我我做错了什么。我在 ViewController 中有一个 *nib 文件的实例。 ViewController 实现 UITextFieldDelegate。在委托(delegate)方法“textField shouldChangeCharactersInRange”中,我调用了用 *nib 类编写的方法。在 *nib 类中我初始化了一个 User 对象,但是在 ViewController 调用 User 对象的方法中是 nil...

这是代码..

@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.usersTableView = [[UsersTableView alloc] init];

// Call delegate method
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

[self.usersTableView searchTextFieldDidChange:searchString];

}

* Nib 类

#import "User.h"    

@interface UsersTableView()
@property (nonatomic) User *user;
@end


- (instancetype)initWithCoder:(NSCoder *)aDecoder {

self = [super initWithCoder:aDecoder];
if (self) {

[[NSBundle mainBundle] loadNibNamed:@"UsersTableView" owner:self options:nil];

[self addSubview:self.view];
self.user = [[User alloc] init];
}
return self;
}

.....Anyware [self testMethod];

- (void)testMethod {
NSLog (@"%@", self.user) // user object exist
}

// Method called from ViewController

- (void)searchTextFieldDidChange:(NSString *)searchText {

NSLog (@"%@", self.user) // user object is nil...
}

有什么建议吗?

最佳答案

我发现您的实现中有很多错误。请让我一一更正。

-(instancetype)initWithCoder:(NSCoder *)aDecoder {       
self = [super initWithCoder:aDecoder];
if (self) {

[[NSBundle mainBundle] loadNibNamed:@"UsersTableView" owner:self options:nil];

[self addSubview:self.view];
self.user = [[User alloc] init];
}
return self; }

loadNibNamed: 方法将返回一个 UIView* 数组。如果你想使用你的 nib 的 View ,那么你需要使用它的返回值。

- (instancetype)initWithCoder:(NSCoder *)aDecoder {

self = [super initWithCoder:aDecoder];
if (self) {

NSArray* viewArray = [[NSBundle mainBundle] loadNibNamed:@"UsersTableView" owner:self options:nil];

[self addSubview:[viewArray firstObject]];
self.user = [[User alloc] init];
}
return self;
}
  1. 自定义类初始化:

您使用一个简单的 alloc init 创建您的 tableView,它不调用 initWithCoder 方法。

self.usersTableView = [[UsersTableView 分配] 初始化];

我认为您应该实现 - (instancetype)init 方法,并将自定义 View 初始化放在那里。

-(instancetype)init{        
self = [super init];
if (self) {

NSArray* viewArray = [[NSBundle mainBundle] loadNibNamed:@"UsersTableView" owner:self options:nil];

[self addSubview:[viewArray firstObject]];
self.user = [[User alloc] init];
}
return self;
}

我希望它能有所帮助,并且它会起作用。

关于ios - 从 ViewController 调用 nib 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463390/

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