为了账号安全,请及时绑定邮箱和手机立即绑定

四个按钮的touch up inside为什么不能绑定到一个@IBAction方法?我试过了做不到,如果可以做到的话只需要把sender as UIButton,然后再把uibutton.selected = true.这样这四个方法明显可以合并到一起

四个按钮的touch up inside为什么不能绑定到一个@IBAction方法?我试过了做不到,如果可以做到的话只需要把sender as UIButton,然后再把uibutton.selected = true.这样这四个方法明显可以合并到一起

正在回答

2 回答

界面上可以完成,给你我的实现:

    关键的地方就是需要在界面上对应的btn上设置sender.restorationIdentifier,不同的flag而已,或者使用tag也行。


import UIKit


class DetailViewController: UIViewController, UITextFieldDelegate{

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        //让当前类处理录入域的相关处理(UITextFieldDelegate中的协议接口):键盘回收等

        todoItem.delegate = self

    }

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    //点击界面的某个位置的时候执行

    override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent){

        //取消下面的输入域的聚焦状态

        todoItem.resignFirstResponder()

    }

    

    // MARK - UITextFieldDelegate

    //当点击键盘右下角的确认之后该方法会被调用

    func textFieldShouldReturn(textField: UITextField) -> Bool {

        //取消下面的输入域的聚焦状态

        todoItem.resignFirstResponder()

        return true

    }

    

    @IBOutlet weak var todoItem: UITextField!

    

    @IBOutlet weak var todoDate: UIDatePicker!

    

    var preViewTableView: UITableView? = nil

    

    var isTappedMenuBut = false

    

    var lastSender: UIButton?

    

    var selectedImageButName: String? = nil

    

    func setTopMenuBarStatus(sender: UIButton){

        if !isTappedMenuBut{

            isTappedMenuBut = true

        }else{

            lastSender!.selected = false

        }

        lastSender = sender

        sender.selected = true

        let identifer = (lastSender?.restorationIdentifier)!

        switch identifer{

        case "child":

            selectedImageButName = "child-selected"

        case "tel":

            selectedImageButName = "phone-selected"

        case "shooping":

            selectedImageButName = "shopping-cart-selected"

        case "travel":

            selectedImageButName = "travel-selected"

        default:

            println("没有匹配的iamge type name")

            break

        }

        

    }

    

    @IBAction func todoTypeTapped(sender: UIButton) {

        if let typeFlag = sender.restorationIdentifier{

            setTopMenuBarStatus(sender)

        }else{

            println("todoTypeTapped:: 没有匹配的iamge type name")

        }

    }

    

    @IBAction func submitTapped() {

        if lastSender == nil{

            println("没有添加任何数据")

        }else{

            let todo = TodoModel(id: NSUUID().UUIDString,

                image: selectedImageButName!,

                title: todoItem.text,

                date: todoDate.date)

            //将新增的todoitem放入缓存

            todos.append(todo)

            //注意这个preViewTableView是上一个界面中的tableview控件,因为我用视频中的方式操作的话,会延迟渲染,也就是,append之后不会立即显示,等到append第二个回到界面1才会显示第一次append的数据,无奈,我就把上一个界面的该控件传下来,添加之后直接让其重新渲染,这个地方不知道是啥情况。

            preViewTableView?.reloadData()

        }

    }

    

    

    

}


0 回复 有任何疑惑可以回复我~

这个问题我自己google到了处理方法,在界面上好像不能绑定,但是在代码里面可以做到.只要调用UIButton的addTarget方法就可以了.代码如下:

    override func viewDidLoad() {

        super.viewDidLoad()

        childButton.addTarget(self, action: "imageTapped:", forControlEvents: .TouchUpInside)

        phoneButton.addTarget(self, action: "imageTapped:", forControlEvents: .TouchUpInside)

        shoppingCartButton.addTarget(self, action: "imageTapped:", forControlEvents: .TouchUpInside)

        travelButton.addTarget(self, action: "imageTapped:", forControlEvents: .TouchUpInside)

    }

    func resetButtons() {

        childButton.selected = false

        phoneButton.selected = false

        shoppingCartButton.selected = false

        travelButton.selected = false

    }

    func imageTapped(sender: AnyObject) {

        resetButtons()

        (sender as UIButton).selected = true

    }

注意action只方法后面要加:号,如果这个方法没有参数就不要加:号.原因在这里:http://stackoverflow.com/questions/24007650/selector-in-swift



1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
使用Swift开发iOS8 App实战
  • 参与学习       62613    人
  • 解答问题       541    个

通过苹果最新Swift语言开发iOSApp,从零开始学习iOS的开发

进入课程

四个按钮的touch up inside为什么不能绑定到一个@IBAction方法?我试过了做不到,如果可以做到的话只需要把sender as UIButton,然后再把uibutton.selected = true.这样这四个方法明显可以合并到一起

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信