在选择器中从不同的类调用 func

巴兰·卡拉古兹

我正在使用UIGestureRecognizer. 我试图从选择器中的不同类调用 func,但是我NSInvalidArgumentException在它执行时得到了。

import Foundation
import UIKit

class helperClass {

var onBoardingImageArray : [UIImage]?
var onBoardingPageControl : UIPageControl?
var onBoardingImageView : UIImageView?

init(imageArray : [UIImage] , pageControl : UIPageControl , yourImageView : UIImageView) {
    onBoardingImageArray = imageArray
    onBoardingPageControl = pageControl
    onBoardingImageView  = yourImageView

}


@objc func firstImageSwipeGestureAction(gesture :UIGestureRecognizer){
    if let swipeGesture = gesture as? UISwipeGestureRecognizer {
        switch swipeGesture.direction {
        case UISwipeGestureRecognizerDirection.right:
            if (onBoardingPageControl?.currentPage)! > 0{
                print("Swiped right")
                onBoardingPageControl?.currentPage -= 1
                self.onBoardingImageView?.image = onBoardingImageArray?[(onBoardingPageControl?.currentPage)!]
            }

        case UISwipeGestureRecognizerDirection.left:
            if (onBoardingPageControl?.currentPage)! < (onBoardingImageArray?.count)! - 1{
                print("Swiped left")
                onBoardingPageControl?.currentPage += 1
                self.onBoardingImageView?.image = onBoardingImageArray?[(onBoardingPageControl?.currentPage)!]
            }
        default:
            break
        }
    }
}

}


import UIKit

class MainController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.addTaped()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func addTaped(){
    let helpClasses : helperClass = helperClass.init(imageArray: self.firtImageViewArray! , pageControl:firstPageControl , yourImageView: firstImageView)

    let firstImageswipeGestureRecognizer = UISwipeGestureRecognizer(target: helpClasses, action: #selector(helpClasses.firstImageSwipeGestureAction))
    firstImageswipeGestureRecognizer.direction = .right
    self.firstImageView.isUserInteractionEnabled = true
    self.firstImageView.addGestureRecognizer(firstImageswipeGestureRecognizer)

    let firstImageswipeGestureRecognizerLeft = UISwipeGestureRecognizer(target: helpClasses, action: #selector(helpClasses.firstImageSwipeGestureAction))
    firstImageswipeGestureRecognizer.direction = .left
    self.firstImageView.isUserInteractionEnabled = true
    self.firstImageView.addGestureRecognizer(firstImageswipeGestureRecognizerLeft)


}

  @IBOutlet weak var firstImageView: UIImageView!
  @IBOutlet weak var firstPageControl: UIPageControl!
  let firtImageViewArray : [UIImage]? = [#imageLiteral(resourceName: "Eagle9")]

}
肮脏的丹尼

您正在正确设置所有内容,但在初始化helpClasses.

因为你在函数作用helpClasses域内声明了变量addTaped(),所以会在栈上分配。一旦您的函数完成,helpClasses变量将被释放,从堆栈中删除,它变成nil. 从那时起,您正在向一个对象发送消息,什么是nil,因此可以理解,什么也没有发生。

为了解决这个问题,在函数作用域之外的堆上声明你的变量。最好是如果你在你的MainController.

例子:

import UIKit

class MainController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.addTaped()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func addTaped(){
// Initialise helpclasses here, but not as a local variable!!
    helpClasses = helperClass.init(imageArray: self.firtImageViewArray! , pageControl:firstPageControl , yourImageView: firstImageView)

    let firstImageswipeGestureRecognizer = UISwipeGestureRecognizer(target: helpClasses, action: #selector(helpClasses.firstImageSwipeGestureAction))
    firstImageswipeGestureRecognizer.direction = .right
    self.firstImageView.isUserInteractionEnabled = true
    self.firstImageView.addGestureRecognizer(firstImageswipeGestureRecognizer)

    let firstImageswipeGestureRecognizerLeft = UISwipeGestureRecognizer(target: helpClasses, action: #selector(helpClasses.firstImageSwipeGestureAction))
    firstImageswipeGestureRecognizer.direction = .left
    self.firstImageView.isUserInteractionEnabled = true
    self.firstImageView.addGestureRecognizer(firstImageswipeGestureRecognizerLeft)


}

  @IBOutlet weak var firstImageView: UIImageView!
  @IBOutlet weak var firstPageControl: UIPageControl!
  let firtImageViewArray : [UIImage]? = [#imageLiteral(resourceName: "Eagle9")]
  // Move your helpClasses variable here
  var helpClasses: helperClass!
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift 2:UIPinchGestureRecognizer中的选择器:如何从另一个类访问func

来自分类Dev

在Swift中返回func的func

来自分类Dev

在 Func 委托中调用 Func 委托的方法

来自分类Dev

如何在 Func() 中调用类方法

来自分类Dev

为什么func()和func(void)不同

来自分类Dev

C ++中func()和(* this).func()之间的区别

来自分类Dev

从Swift中的func返回void func

来自分类Dev

PostgreSQL:从func()中选择*。

来自分类Dev

如何在 Swift 中调用 Func 到其他 Func

来自分类Dev

在 dispatch func react redux 中调用 dispatch func

来自分类Dev

用CGFloat变量调用func

来自分类Dev

在 Swift 中对类参数使用类 func

来自分类常见问题

c99中的func()vs func(void)

来自分类Dev

TkInter中的“ func”和“ func()”有什么区别?

来自分类Dev

为什么似乎func与C中的&func相同?

来自分类Dev

TkInter中的“ func”和“ func()”有什么区别?

来自分类Dev

方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

来自分类Dev

VB中的Func vs Function

来自分类Dev

通用Func <>中的可选参数

来自分类Dev

bash在回显中调用ext func

来自分类Dev

在WatchKit中没有调用func session(..)

来自分类Dev

与Func <T,object>选择器属性一起使用协变

来自分类Dev

使用FUNC方法(选择器)返回列表的“简明版本”

来自分类Dev

如何将通用选择器Func <T,U>传递给某些方法以执行搜索?

来自分类Dev

将Func属性选择器与Entity Framework 6结合使用

来自分类Dev

在Int扩展上调用muting func

来自分类Dev

查找Func委托的调用方法的名称

来自分类Dev

Func <T>是否获得每个调用的结果?

来自分类Dev

动作完成后调用func?

Related 相关文章

热门标签

归档