我在程序中创建了一个UITextView
。他们必须这样做:
因为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,所以我必须转到“Next”和“Previous”TextView。好的,这只是运行
[textView1 resignFirstResponder];
[textView2 becomeFirstResponder];
如果所有textView都具有相同的inputView(键盘)而不是按钮正常工作。但是......因为其中一个textView有另一个inputView,而不是我的问题。
如果我首先使用按钮点击普通的UITextView,那么按钮显示正确就像这样。红色方块位于键盘上方,因此可以正常工作。
如果第一次点击是在带有自定义inputView的UITextView中,则该按钮再次显示正确
但是现在,如果navegate带有工具栏(带有一个简单的resignFirstResponder
和becomeFirstResponder
),按钮将显示在键盘下面
简历中...所有问题仅仅因为我使用自定义输入视图。如果我只使用键盘,我就不会有任何问题。
要解决这个问题,只需将UIView的自定义按钮放在键盘上方即可。我尝试获取主UIWindows并发送消息:
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:myview];
但不行。有什么想法解决这个bug吗?
答案 0 :(得分:0)
我希望我理解正确,我建议你管理按钮的Z位置。这样它就可以出现在所有组件之上。为方便起见,我建议您使用以下开源Manage Z Order of Views。 希望这会对你有所帮助,如果不是,请告诉我。
干杯, 阿伦。
答案 1 :(得分:0)
我解决了。想法是找到键盘的UIView并添加像子视图的按钮。这是代码:
- (void)keyboardDidShow {
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
for(UIView* potentialKeyboard in tempWindow.subviews) {
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
if([[potentialKeyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
keyboard = potentialKeyboard;
} else {
if([[potentialKeyboard description] hasPrefix:@"<UIKeyboard"] == YES) {
keyboard = potentialKeyboard;
}
}
}
}
[keyboard addSubview:key];
[keyboard bringSubviewToFront:key];
}