我曾经让我的UIView
与几位代表合作得很好,其中一些代表如下。现在我将UIView
从IB
更改为UIScrollView
(现在用作主视图)。
由于我已经更改为UIScrollView
我的活动代表,如下面的代表不再工作。比如键盘,我也有一个可以移动的元素,而不仅仅是静态的。
我将所有代表分配给了我能想到的IB,并完成了我所知道的大部分事情。但是我对于事件没有被触发的原因一无所知......
如果我通过UIView
他们的工作回到原来的cmd + z
。
有人能指出我正确的方向吗?
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
[self.view endEditing:TRUE];
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
// register for keyboard notifications
return YES;
}
编辑 - 补充答案:
@Wezly
答案完全有效。
但是,如果有人不想继承UIScrollView
并仅使用UITextFieldDelegate
方法。
另一种方法是添加viewDidLoad
:
注意:你仍然无法访问很多东西,但它的另一种解决方法
///
/// DelegateNotifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:self.view.window];
// register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldDidEndEditing:)
name:UITextFieldTextDidEndEditingNotification
object:self.view.window];
答案 0 :(得分:1)
我建议您继承UIScrollView对象并在其中添加触摸事件,如下所示。
canvasObject.h
#import <UIKit/UIKit.h>
@interface canvasObject : UIScrollView
@end
canvasObject.m
#import "canvasObject.h"
@implementation canvasObject
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.canCancelContentTouches = false;
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
//Do Stuff
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
return YES;
}
@end
然后使用界面构建器中的身份检查器将您的UIScrollView
链接到新的滚动视图子类,如下所示。