首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextFieldDelegate不工作

UITextFieldDelegate不工作
EN

Stack Overflow用户
提问于 2014-01-08 19:27:22
回答 4查看 308关注 0票数 0

我试图将UITextViewDelegate方法从我的项目的主类中分离出来,我创建了一个类来管理委托方法,但是我不能从主类中更改IBOulets的值。

我用一个ViewController和一个TextFieldController做了一个测试项目,在故事板中我添加了一个文本字段和一个标签。当我开始在文本字段中写入时,我想要做的是更改标签的文本。以下是代码:

查看控制器h:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "TextFieldController.h"

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UITextField *textField;
@property (strong, nonatomic) IBOutlet UILabel *charactersLabel;

@end

视图控制器m:

代码语言:javascript
复制
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) TextFieldController *textFieldController;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _textFieldController = [[TextFieldController alloc] init];
    _textField.delegate = _textFieldController;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end

TextFieldController.h:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface TextFieldController : UIViewController <UITextFieldDelegate>

@end

文本字段Controller.m:

代码语言:javascript
复制
#import "TextFieldController.h"

@interface TextFieldController ()

@property ViewController *viewController;

@end

@implementation TextFieldController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
    NSLog(@"hello");
    _viewController.charactersLabel.text = @"hello";
    return YES;
}

@end

当我开始在文本字段中写作时,日志中会打印消息"Hello“,但是标签的文本不会改变。我想知道如何从另一个类更改label文本值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-08 20:30:59

首先更改TextFieldController.h如下所示:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface TextFieldController : NSObject <UITextFieldDelegate>
{
}
@property (nonatomic, assign) ViewController *viewController;
@end

然后更改TextFieldController.m文件如下:

代码语言:javascript
复制
#import "TextFieldController.h"

@interface TextFieldController ()

@end

@implementation TextFieldController

- (BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
    NSLog(@"hello");
    self.viewController.charactersLabel.text = @"hello";
    return YES;
}

@end

在ViewController.m中这样做:

代码语言:javascript
复制
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) TextFieldController *textFieldController;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _textFieldController = [[TextFieldController alloc] init];
    _textFieldController.viewController = self;
    _textField.delegate = _textFieldController;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end

这是可行的,但我个人不喜欢你这样做。祝你好运:)

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 19:32:23

它失败了,因为_viewController是零。为了支持双向通信,您需要在委托中分配viewController属性。

此外,我强烈建议您将委托对象作为NSObject的子类,而不是UIViewController的子类。它对控制视图没有任何作用。您可以在ViewController对象viewDidLoad中手动实例化它。

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 19:32:43

在TextViewController中,我看不到viewController属性(_viewController ivar)是在哪里设置的,所以它可能是零。您应该在创建TextViewController实例时设置它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21004761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档