2014-12-04 27 views
-2

基本上我希望我的ImagePicker能够在每次用户输入名称并为此名称选择图像时将捕获的图像分配给tableview中的新行。我遇到至少2种类型的错误代码如下:SWIFT - UIimagepicker将图像分配到数组

1)'UIImageView'不是'cell.itemImage.image = UIImage(named:selectedImageArray [indexPath.row] )”

2)如何访问例如一个问题‘.contentMode’和” .clipsToBounds'所分配的图像(即每个阵列中被分配到的tableview)

的性质欣赏任何人的帮助对这些~~

Tableview Controller:

import UIKit 

class AddPostItemTableViewController: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITableViewDelegate { 

@IBOutlet var titleName: UILabel! 
@IBOutlet var tapCamera: UIImageView! 
@IBOutlet var tapLibrary: UIImageView! 
@IBOutlet weak var itemNameField:UITextField! 

@IBOutlet weak var AddPostTableView:UITableView! 

var selectedImageArray:[UIImageView!] = [] 
var selectedItemNameArray:[String!] = [] 

let tapCameraRec = UITapGestureRecognizer() 
let tapLibraryRec = UITapGestureRecognizer() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    tapCameraRec.addTarget(self, action: "tappedCamera") 
    tapLibraryRec.addTarget(self, action: "tappedLibrary") 
    tapCamera.addGestureRecognizer(tapCameraRec) 
    tapLibrary.addGestureRecognizer(tapLibraryRec) 
    tapLibrary.userInteractionEnabled = true 
    tapCamera.userInteractionEnabled = true 

    // Do any additional setup after loading the view. 
} 


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

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    self.view.endEditing(true) 
    // Dismiss keyboard on touch 
} 

func tappedLibrary(){ 

    if itemNameField.text == "" { 
     let alertController = UIAlertController(title: "Oops", message: "Please key in the name of item first", preferredStyle: .Alert) 
     let doneAction = UIAlertAction(title: "OK", style: .Default, handler: nil) 
     alertController.addAction(doneAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 

     return 
    } 

    else if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.allowsEditing = true 
     imagePicker.delegate = self 
     imagePicker.sourceType = .PhotoLibrary 

     self.presentViewController(imagePicker, animated: true, completion: nil) 
    } 
} 

func tappedCamera(){ 

    if itemNameField.text == "" { 
     let alertController = UIAlertController(title: "Oops", message: "Please key in the name of item first", preferredStyle: .Alert) 
     let doneAction = UIAlertAction(title: "OK", style: .Default, handler: nil) 
     alertController.addAction(doneAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 

     return 
    } 

    else if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.allowsEditing = true 
     imagePicker.delegate = self 
     imagePicker.sourceType = .Camera 

     self.presentViewController(imagePicker, animated: true, completion: nil) 
    } 
} 

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image:UIImageView!, editingInfo: [NSObject : AnyObject]!) { 
    selectedImageArray.append(image) 
    selectedImageArray.contentMode = UIViewContentMode.ScaleAspectFill 
    selectedImageArray.clipsToBounds = true 

    selectedItemNameArray.append(itemNameField!.text) 

    dismissViewControllerAnimated(true, completion: nil) 
} 

// 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 
{ 
    // Return the number of rows in the section. 
     return self.selectedItemNameArray.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: 
    NSIndexPath) -> UITableViewCell { 

     let cellIdentifier = "ItemCell" 
     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: 
      indexPath) as AddPostTableViewCell 

     // Configure the cell... 
     cell.itemName.text = selectedItemNameArray[indexPath.row] 
     cell.itemImage.image = UIImage(named: selectedImageArray[indexPath.row]) 

     return cell 
} 

泰伯维细胞:

import UIKit 

class AddPostTableViewCell: UITableViewCell { 

@IBOutlet weak var itemName:UILabel! 
@IBOutlet weak var itemImage:UIImageView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 
+0

这是一吨的代码...要得到你正在寻找的答案,你可能想分解成两个单独的问题,并限制代码对每个与问题相关的代码。 – rfornal 2014-12-07 03:09:31

回答

0

第一个错误表明您数组包含的UIImageViews,而不是图像的名字。 UIImage(imageNamed:)接受图像的名称作为字符串。您可能需要类似

cell.itemImage.image = selectedImageArray[indexPath.row].image 

或者如果您要使用UIImage(imageNamed :),请改为使用您的名称数组。

关于第二个问题,你可以在[indexPath.row]之后加一个点来访问存储对象在给定索引处的属性,就像我上面做的那样。或者你可以用更可读的方式做到这一点:

var myImage = selectedImageArray[indexPath.row] 
myImage.someProperty 
+0

非常感谢。我现在明白了。 – tony108 2014-12-05 06:43:35