可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?

Posted

技术标签:

【中文标题】可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?【英文标题】:Possible to implement gesture recognition with a custom UIViewController but no custom UIView class? 【发布时间】:2014-11-21 23:41:28 【问题描述】:

当我切换到以编程方式创建 UIView 而不是使用 xib 时,我的手势识别器停止工作。 问题:如何仅使用自定义视图控制器而不使用自定义 UIView 以编程方式实现手势识别,或者这不可能?

我知道有些人认为这是不好的做法,但这不是我的问题。我宁愿不必将与手势相关的功能移动到 UIView 子类,因为那样我只会为视图设置某种委托协议来告诉视图控制器有关手势,这在我看起来很迂回'很高兴在视图控制器中拥有这一切。界面生成器和 xib 一定做了一些我可以通过编程完成的事情——它是什么?

这是我的代码,以防万一。手势识别器都可以在 xib 上正常工作。

@interface CustomViewController () <UITextFieldDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate, UITableViewDataSource, UITableViewDelegate,  UIViewControllerRestoration, UIScrollViewDelegate>

-(id)init

    self = [super init];

    if(self)
....
        CGFloat height = [[UIScreen mainScreen] bounds].size.height;
        CGFloat width = [[UIScreen mainScreen] bounds].size.width;
        UIView *sv = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
        sv.backgroundColor = [UIColor redColor];
        self.view = sv;
...
       
    return self;



- (void)viewDidLoad 
    [super viewDidLoad];

    UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRight:)];
    rightSwipe.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:rightSwipe];


    UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft:)];
    leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
    [self.view addGestureRecognizer:leftSwipe];


    UISwipeGestureRecognizer *upSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
    upSwipe.direction = UISwipeGestureRecognizerDirectionUp;
    upSwipe.numberOfTouchesRequired = 1;
    [self.view addGestureRecognizer:upSwipe];    

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

我认为即使给定您的代码也不会调用 viewDidLoad。您用于创建控制器视图的所有代码(现在位于 init 中)都应移至 loadView。如果你把代码放在那里,那么 viewDidLoad 将被调用。

【讨论】:

以上是关于可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?的主要内容,如果未能解决你的问题,请参考以下文章

关闭一个自定义弹出窗口UIViewController并立即显示另一个自定义弹出窗口UIViewController -SWIFT

使用 UIViewController 子类自定义 iPhone 控件

UICollectionView 未使用自定义 UIViewController 更新

使用 UIViewController 自定义动画

使用自定义转换旋转模态 UIViewController

从自定义 UIViewController 导航到 TabBarController 而不使用 segue