Ios 动作参数
我有这样的代码Ios 动作参数,ios,xcode,swift,Ios,Xcode,Swift,我有这样的代码 func showSearchBar(searchBar: UISearchBar, navigationItem: UINavigationItem) { searchBar.alpha = 0 navigationItem.titleView = searchBar searchBar.showsCancelButton = true navigationItem.setRightBarButtonItem(nil, animated: t
func showSearchBar(searchBar: UISearchBar, navigationItem: UINavigationItem) {
searchBar.alpha = 0
navigationItem.titleView = searchBar
searchBar.showsCancelButton = true
navigationItem.setRightBarButtonItem(nil, animated: true)
for subView in searchBar.subviews {
for subsubView in subView.subviews {
if let textField = subsubView as? UITextField {
textField.attributedPlaceholder = NSAttributedString(string:NSLocalizedString("Search", comment:""),
attributes:[NSForegroundColorAttributeName: UIColor(red: 25/255, green: 128/255, blue: 214/255, alpha: 1)])
textField.font = UIFont(name:"AvenirNext-Medium", size: 15)
textField.textColor = UIColor(red: 65/255, green: 65/255, blue: 65/255, alpha: 1)
}
}
}
UIView.animateWithDuration(0.5, animations: {
searchBar.alpha = 1
}, completion: { finished in
searchBar.becomeFirstResponder()
})
}
func hideSearchBar(searchBar: UISearchBar, navigationItem: UINavigationItem, navigationController: UINavigationController, leftButton: UIBarButtonItem) {
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "showSearchBar:")
searchBar.alpha = 0
navigationController.navigationBar.topItem?.rightBarButtonItem = button
navigationItem.setLeftBarButtonItem(leftButton, animated: true)
searchBar.clipsToBounds = true
UIView.animateWithDuration(0.3, animations: {
navigationController.navigationBar.alpha = 1
}, completion: { finished in
})
}
调用func hideSearchBar后出现错误
我不知道,但我认为这是一个错误,因为我在hideSearchBar中调用showSearchBar,但在showSearchBar上有2个参数,但我没有发送它。。。如何在操作中发送2个参数
我试过了
showSearchBar:
showSearchBar::
但它仍然是错误的,我该怎么办?
或者我的代码中有另一个错误?要正确使用名称,需要将Swift方法声明转换为该方法的Objective-C名称。此翻译很简单,并且遵循完全机械的规则,但您将以文字字符串形式输入名称,很容易出现键入错误,因此请小心:
func sayHello() -> String // "sayHello"
func say(s:String) // "say:"
func say(s:String, times n:Int) // "say:times:"
即使选择器名称与声明的方法正确对应,也可能发生崩溃。例如,这里有一个小测试类
,它创建一个NSTimer
,并告诉它每秒调用一次特定的方法:
class MyClass {
var timer : NSTimer? = nil
func startTimer() {
self.timer = NSTimer.scheduledTimerWithTimeInterval(1,
target: self, selector: "timerFired:",
userInfo: nil, repeats: true)
}
func timerFired(t:NSTimer) {
println("timer fired")
}
}
这个类在结构上没有什么问题;它可以编译,并且可以在应用程序运行时实例化。但是当我们调用startTimer时,我们崩溃了。问题不在于timerFired
不存在,或者“timerFired:
不是它的名字;问题是Cocoa找不到timerFired
。这反过来是因为我们的类MyClass
是一个纯粹的Swift类;因此,它缺乏Objective-C内省和消息发送机制,使Cocoa能够查看和调用timerFired
。以下任一解决方案都可以解决此问题:
- 将
MyClass
声明为NSObject
的子类
- 使用
@objc
属性声明MyClass
- 使用
@obc
属性声明timerFired
- 用
dynamic
关键字声明timerFired
。(但这可能有点过头了;您应该在需要时保留使用dynamic
,即Objective-C需要能够更改类成员的实现。)
这是
在您的情况下,请这样做:
"showSearchBar:navigationItem:"
更新:
从项目中删除General.swift,并用以下代码替换Home.swift中的代码:
@IBAction func searchBarAction(sender: AnyObject) {
showSearchBar(self.searchBar, navItem: self.navigationItem)
}
func showSearchBar(searchBar: UISearchBar, navItem navigationItem: UINavigationItem) {
searchBar.alpha = 0
navigationItem.titleView = searchBar
searchBar.showsCancelButton = true
navigationItem.setRightBarButtonItem(nil, animated: true)
for subView in searchBar.subviews {
for subsubView in subView.subviews {
if let textField = subsubView as? UITextField {
textField.attributedPlaceholder = NSAttributedString(string:NSLocalizedString("Search", comment:""),
attributes:[NSForegroundColorAttributeName: UIColor(red: 25/255, green: 128/255, blue: 214/255, alpha: 1)])
textField.font = UIFont(name:"AvenirNext-Medium", size: 15)
textField.textColor = UIColor(red: 65/255, green: 65/255, blue: 65/255, alpha: 1)
}
}
}
UIView.animateWithDuration(0.5, animations: {
searchBar.alpha = 1
}, completion: { finished in
searchBar.becomeFirstResponder()
})
}
//MARK: UISearchBarDelegate
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
hideSearchBar(self.searchBar, navigationItem: self.navigationItem, navigationController: self.navigationController!, leftButton: btnMenu)
}
func hideSearchBar(searchBar: UISearchBar, navigationItem: UINavigationItem, navigationController: UINavigationController, leftButton: UIBarButtonItem) {
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "searchBarAction:") //add your button action here.
searchBar.alpha = 0
navigationItem.rightBarButtonItem = button
navigationItem.setLeftBarButtonItem(leftButton, animated: true)
searchBar.clipsToBounds = true
UIView.animateWithDuration(0.3, animations: {
navigationController.navigationBar.alpha = 1
}, completion: { finished in
})
}
我尝试了“showSearchBar:navigationItem:”但仍然有错误,我不知道这个函数上的参数是否是必需的。。。我能寄吗?但是谢谢你的回复。。