Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 动作参数_Ios_Xcode_Swift - Fatal编程技术网

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名称。此翻译很简单,并且遵循完全机械的规则,但您将以文字字符串形式输入名称,很容易出现键入错误,因此请小心:

  • 该名称以方法名称中左括号前面的所有内容开头
  • 如果该方法不带任何参数,请停止。这就是名字的结尾
  • 如果该方法采用任何参数,请添加冒号
  • 如果该方法接受多个参数,请添加除第一个参数外的所有参数的外部名称,并在每个外部参数名称后面加一个冒号
  • 请注意,这意味着如果该方法采用任何参数,则其Objective-C名称将以冒号结尾。大写计数,名称中除冒号外不应包含空格或其他标点符号

    为了举例说明,这里有三个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:”但仍然有错误,我不知道这个函数上的参数是否是必需的。。。我能寄吗?但是谢谢你的回复。。