我试图在用户点击返回键时插入当前日期/时间,或者开始在Xcode中的UITextView上键入,但不太确定从哪里开始。
我知道这个方法适用于单击TextView但似乎不起作用:
- (void)textViewDidBeginEditing:(UITextView *)textView {
self.txtDetail.text = [self.txtDetail.text stringByAppendingString:@"Hello!"];
}
由于
DetailViewController.h
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> {
UITextView *txtDetail;
}
@property (nonatomic, retain) IBOutlet UITextView *txtDetail;
- (void)textViewDidBeginEditing:(UITextView *)textView;
DetailViewController.m
@synthesize txtDetail;
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"Hello");
self.txtDetail.text = [self.txtDetail.text stringByAppendingString:@"Hello!"];
}
我已将此添加到我的.m文件中:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
BOOL shouldChangeText = YES;
if ([text isEqualToString:@"\n"]) {
// Find the next entry field
txtDetail.text = [txtDetail.text stringByAppendingString:@"\nhey\n"]; }
textView.editable = YES;
shouldChangeText = NO;
[textView becomeFirstResponder];
return shouldChangeText;
}
我得到了预期的效果(每当我按下键盘上的返回时都会添加嘿)但我现在无法输入任何内容......任何想法?
答案 0 :(得分:0)
您必须将控制器声明为实现UITextViewDelegate协议,然后将其作为文本视图的委托连接。否则它根本不会收到委托消息。
然后你必须实现:
– textView:shouldChangeTextInRange:replacementText:
...返回YES / TRUE,否则不添加任何文本。
您需要实现具有返回的所有UITextViewDelegate协议方法。如果不这样做,默认情况下文本视图假定为NO。
请参阅:Text and Web Programming Guide: Managing TextFields and TextViews
您还需要了解Delegate Pattern。
答案 1 :(得分:0)
用以下方法替换您的方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
BOOL shouldChangeText = YES;
if ([text isEqualToString:@"\n"] && textView == detailText)
{
// Find the next entry field
txtDetail.text = [txtDetail.text stringByAppendingString:@"\nhey\n"];
textView.editable = YES;
shouldChangeText = NO;
[textView becomeFirstResponder];
}
return shouldChangeText;
}
答案 2 :(得分:0)
委托调用的机制是iOS编程的一个非常重要的部分。 Apple库中有一个文档,许多好书也对它进行了讨论。 Apress的书“Beginning iPhone Programming”非常好,涵盖了委托方法。