【发布时间】:2012-01-18 19:38:42
【问题描述】:
我在我的程序中创建了一个 2 UITextView。他们必须这样做:
- TextView1 - 将有一个新的 InputView
- TextView2 - 将是一个带有新按钮的普通数字键盘
因为 iPhone 的数字键盘在零的左边有一个空按钮。所以,我可以放一个 UIView 来模拟一个新的键盘。所以,我用一个 UIToolbar 和这个按钮创建了一个 UIView,并在 TextView 中设置了一个简单的
[textView setInputAccessoryView:myView];
在这个视图中捕捉点击有点复杂。我必须在 main.m 中继承 principalClassName
int retVal = UIApplicationMain(argc, argv, MyPrincialClass ,MyDelegateClass);
然后用
创建这个类@interface MyPrincialClass : UIApplication
- (void)sendEvent:(UIEvent *)anEvent;
@end
@implementation MyPrincialClass
- (void)sendEvent:(UIEvent *)event {
[super sendEvent:event];
NSSet *touches = [event allTouches];
UITouch *touch = touches.anyObject;
[[NSNotificationCenter defaultCenter] postNotificationName:@"click" object:(id)touch];
}
@end
现在只听这个通知并检查这个点击是否在正确的区域。
因为我有一个 UINavegationBar,我必须去“下一个”和“上一个”TextView。好的,这只是运行
[textView1 resignFirstResponder];
[textView2 becomeFirstResponder];
如果所有 textView 具有相同的 inputView(键盘)而不是按钮正常工作。但是...因为其中一个 textView 有另一个 inputView,所以我的问题开始了。
如果我首先单击带有按钮的普通 UITextView,则该按钮会像这样显示正确。红色方块在键盘上方,所以它可以工作。
如果第一次点击是在带有自定义 inputView 的 UITextView 中,则按钮再次显示正确
但是现在,如果使用工具栏导航(使用简单的resignFirstResponder 和becomeFirstResponder),按钮将显示在键盘下方
在简历中......所有问题都只是因为我使用了自定义输入视图。如果我只使用键盘,我不会有任何问题。
要解决这个问题,只需将自定义按钮的 UIView 放在键盘上方即可。我尝试获取主 UIWindows 并发送消息:
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:myview];
但不起作用。有什么办法解决这个错误吗??
【问题讨论】:
标签: iphone objective-c cocoa-touch ios4 uitextview