请告诉我我做错了什么。我在 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;
}
- 自定义类初始化:
您使用一个简单的 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/