Swift UIButton背景图片未由UIImagePicker设置

时间:2014-12-06 23:06:54

标签: swift uibutton uiimagepickercontroller

我可以从PhotoLibrary中选择一个图像,但我的UIButton的背景图像不会改变。 didFinishPickingImage和imagePickerControllerDidCancel中的println没有显示在控制台中,因此我认为这些函数不会被调用。

class AddTeamTableViewController: UITableViewController, UITextFieldDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIAlertViewDelegate {
var picker:UIImagePickerController? = UIImagePickerController()
@IBOutlet var teamNumber: UITextField!
@IBOutlet var schoolName: UITextField!
@IBOutlet var teamImage: UIButton!
@IBAction func cancelButton(sender: AnyObject) {
    dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func addTeam(sender: AnyObject) {
    var newTeam = Team()
    var onlineTeam = PFObject(className: "Team")
    // add new team to the list
    newTeam.name = teamNumber.text
    newTeam.schoolName = schoolName.text
    teamList.append(newTeam)
    // add online
    onlineTeam["name"] = newTeam.name
    onlineTeam["fromUser"] = PFUser.currentUser()
    onlineTeam["schoolName"] = newTeam.schoolName
    onlineTeam.save()
    //close the view
    dismissViewControllerAnimated(true, completion: nil)
}
override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 1
}

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true;
}
@IBAction func pickImage(sender: AnyObject) {
    var image = UIImagePickerController()
    image.delegate = self
    var alert:UIAlertController = UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
    var cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default) {
        UIAlertAction in
        self.openCamera()
    }
    var galleryAction = UIAlertAction(title: "Gallery", style: UIAlertActionStyle.Default) {
        UIAlertAction in
        self.openGallery()
    }       
    var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) {
        UIAlertAction in
    }
    alert.addAction(cameraAction)
    alert.addAction(galleryAction)
    alert.addAction(cancelAction)
    self.presentViewController(alert, animated: true, completion: nil)
    /*
    alert.delegate = self
    alert.message = "Choose Image Source"
    alert.addButtonWithTitle("Camera")
    alert.addButtonWithTitle("Photo Library")
    alert.show()
    */
    //image.sourceType = UIImagePickerControllerSourceType.Camera
    //image.allowsEditing = false
    //self.presentViewController(image, animated: true, completion: nil)
}
func openCamera() {
    if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)) {
        picker!.sourceType = UIImagePickerControllerSourceType.Camera
        self.presentViewController(picker!, animated: true, completion: nil)
    } else {
        openGallery()
    }
}
func openGallery() {
    picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    self.presentViewController(picker!, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
    println("Image selected")
    self.dismissViewControllerAnimated(true, completion: nil)
    teamImage.setBackgroundImage(image, forState: UIControlState.Normal)
}
func imagePickerControllerDidCancel(picker: UIImagePickerController!) {
    println("picker cancel")
}
}

2 个答案:

答案 0 :(得分:1)

按钮似乎没有初始化

let teamImage: UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 380, height: 300))
let imageTest = UIImage(named: "Hypnotoad")

teamImage.setTitle("HypnotoadTitle", forState: .Normal)
teamImage.setBackgroundImage(imageTest, forState: .Normal)

在Playground测试了这个并且工作正常。

Playground test of UIButton with backgroundImage

答案 1 :(得分:0)

我明白了。我有两个不同的UIImagePickerController类型的变量,我保存到错误的变量。我删除了第一个var picker声明,并将代码组合到一个UIImagePickerController中,它按预期工作。