0
@interface SomeViewController : UIViewController <UITextViewDelegate>

@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) UIImage *image;

@property (nonatomic, retain) IBOutlet UITextView *textView;

我的视图控制器中需要 textview(editable)。

所以我设置了协议,

并且,IB 也是文件的所有者。(不知道,有没有必要?)

还有我的 .m 文件.. viewDidLoad..

_textView = [[UITextView alloc]init];
[_textView setFrame:CGRectMake(8, 110, 304, 82)];
[_textView setFont:[UIFont boldSystemFontOfSize:12]];
_textView.editable = YES;
//[textView setText:@"hdgffgsfgsfgds"];// if uncommented, this actually visible...

[self.view insertSubview:_textView atIndex:2];

到目前为止,它正在工作。但我希望这些方法能够运行......

- (void)textViewDidChange:(UITextView *)textView
{


    if([_textView.text length] == 0)
    {
        _textView.text = @"Foobar placeholder";
        _textView.textColor = [UIColor lightGrayColor];
        _textView.tag = 0;
    }
}

但是在构建之后,我的文本视图仍然是空的。

我做错了什么?

4

3 回答 3

0

您需要将委托添加到您的文本视图中,请尝试以下操作:

_textView.delegate = self;

另一方面,

textViewDidChange

仅当您更改文本时才有效,如果您想在 textview 中放置文本,您可以执行以下操作:

 _textView.text = @"Foobar placeholder";
        _textView.textColor = [UIColor lightGrayColor];
        _textView.tag = 0;

在你的ViewdidLoad

于 2012-04-12T13:41:02.023 回答
0

合成textView的时候,是不是像@synthesize textView = _textView这样可以用下划线的名字呢?通常,下划线仅用于 setter/getter 方法(例如在覆盖它们时)。

注意

文本视图调用此方法以响应用户对文本的更改。不会调用此方法以响应以编程方式启动的更改。

这是来自 Apple 的文档,用于您使用的方法。这意味着如果您通过代码更改文本,则不会触发该方法。

于 2012-04-12T13:50:27.853 回答
0

您是否期望 [textView setText:@"hdgffgsfgsfgds"] 反过来调用 textViewDidChange:?调用 setText 不会自动调用 textViewDidChange:。

于 2012-04-12T13:53:21.127 回答