gpt4 book ai didi

swift - 如何将目标添加到添加到 View 的按钮?详细 : View is controlled variable within a Class

转载 作者:行者123 更新时间:2023-11-30 10:06:07 25 4
gpt4 key购买 nike

我正在组织一个代码,一个应用程序,我用 iPad Air 2 来控制公司的财务(作为没有 AppStore 的开发人员)。该应用程序显示带有信息的面板,并且这些面板随着用户操作而显示和隐藏。

我决定尝试创建不同的方式并将我的日程安排在 arquivos.swift 之间分开。

那是我的 View Controller 。只有两个按钮,这就是我为 Interface Builder 所做的一切(例如)。应用程序的其余部分以编程方式创建。

enter image description here

此 ViewController 直接连接到 ViewController 类:

class ViewController: UIViewController {

override func prefersStatusBarHidden() -> Bool {
return true
}

var panelInfo: PanelInfo!

var selfSize: CGSize {
get {
return self.view.frame.size
}
}

override func viewDidLoad() {
super.viewDidLoad()

panelInfo = PanelInfo(viewControllerSize: selfSize)
self.view.addSubview(panelInfo.panel)
}


@IBAction func showPropNavigationbar(sender: AnyObject) {
panelInfo.show()
}

@IBAction func hidePropNavigationbar(sender: AnyObject) {
panelInfo.hide()
}

}

为了创建一个将显示信息的 View ,我创建了一个管理它的类。

class PanelInfo {

/*** View Controller Size ***/
private var viewSize: CGSize!

/*** View ***/
internal var panel: UIView!

/*** View Panel Size ***/
private var size: CGSize!

/*** View Position ***/
private var originShow: CGPoint!
private var originHide: CGPoint!

private var closeButton: UIButton!

/*** Start the instance ***/
init(viewControllerSize: CGSize) {

/*** Set values in variables above ***/
viewSize = viewControllerSize
size = CGSize(width: 300, height: viewSize.height)
originShow = CGPoint(x: viewSize.width - size.width, y: 0)
originHide = CGPoint(x: viewSize.width, y: 0)

/*** Create the panel view ***/
panel = UIView(frame: CGRect(origin: originHide, size: self.size))
panel.backgroundColor = UIColor(red: 0.014, green: 0.106, blue: 0.179, alpha: 1.000)

/*** Create the closeButton ***/
closeButton = UIButton(type: .System)
closeButton.frame = CGRect(origin: CGPoint(x: 8, y: 8), size: CGSize(width: 32, height: 32))
closeButton.setImage(UIImage(named: "closeButton"), forState: .Normal)
panel.addSubview(closeButton)
}

func hidepanel(sender: AnyObject) {
print(sender)
self.hide()
}

/*** Show panel in ViewController ***/
internal func show() -> Void {
UIView.animateWithDuration(0.3) { () -> Void in
self.panel.frame.origin = self.originShow
}
}

/*** Hide panel in ViewController ***/
internal func hide() -> Void {
UIView.animateWithDuration(0.3) { () -> Void in
self.panel.frame.origin = self.originHide
}
}

}

当代码执行时,我触摸“显示”,面板就会出现。工作完美。

当我触摸“隐藏”时,面板消失。工作完美。

enter image description here

问题

我正在尝试创建一个用于编程的按钮并添加一个目标来运行以使面板关闭。这个按钮就是closeButton。

<小时/>

如果我添加了目标(nil,action:“hidepanel:”,forControlEvents:.TouchUpInside

什么也没发生

<小时/>

如果我更改 closeButton.addTarget(nil, action: "hidepanel:", forControlEvents: .TouchUpInside

什么也没发生

<小时/>

如果我更改 closeButton.addTarget(self, action: "hidepanel:", forControlEvents: .TouchUpInside)

出现错误:

*** NSForwarding: 警告: 'Panel_Model.PanelInfo' 类的对象 0x7a99ee00 未实现 methodSignatureForSelector: -- 前方有麻烦无法识别的选择器 -[Panel_Model.PanelInfo 隐藏面板:]

<小时/>

如果我尝试更改 closeButton.addTarget(self, action: "hidepanel", forControlEvents: .TouchUpInside)

出现之前的错误

<小时/>

Note: This is a example. The app original is bigger. When I started to build the app, had little time to do it and had little experience in Swift (and Obj-C as well), so I created everything needed in a ViewController. Today I am with almost 5000 lines of programming, and need to find a better way to organize.

我相信该错误可能与 (target: AnyObject?, ...) 相关,这是 AddTarget 的第一项,因为在没有父类(super class)的类中使用...但我找不到解决办法。

我的问题:

1° 这是最好的组织形式?

2º 知道我正在使用一个类,并且该类有一个控制 UIView 的变量。我可以实现添加的按钮来查看和设置按钮上的目标吗?

3°如果可能的话,最好的方法是什么,可以举例说明吗?

最佳答案

尝试以下操作

let button:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 70, height: 30))
button.addTarget(self, action: Selector("hidepanel:"), forControlEvents: UIControlEvents.TouchUpInside)

更新

尝试从`NSObject继承PanelInfo。

关于swift - 如何将目标添加到添加到 View 的按钮?详细 : View is controlled variable within a Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com