2015-06-01 1 views
0

Итак, это то, что происходит: у меня есть два контроллера; MainViewController и DetailsTableViewController. На DetailsTableViewController Я хочу написать имя для случайного рецепта, затем я выбираю изображение из библиотеки фотографий. После этого я хочу отправить эти данные в ячейку MainViewController. Код этого:Передача строки в UILabel и изображение в UIImageView - Swift

import UIKit 
import CoreData 

class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, sendDetailsToMVCDelegate { 


    @IBOutlet weak var mainImage: UIImageView! 
    @IBOutlet weak var tableView: UITableView! 
    var namesListArray: [String] = [] 
    var imagesListArray: [UIImage] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
    } 

    func sendDetailsToMVC (name: String, image: UIImage) { 
     namesListArray.append(name) 
     imagesListArray.append(image) 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return namesListArray.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var row = indexPath.row 
     var name: String = namesListArray[row] as String 
     var image: UIImage = imagesListArray[row] as UIImage 
     var cell = self.tableView.dequeueReusableCellWithIdentifier("customCell") as! CustomCellTableViewCell 
     cell.customLabel!.text = (name as String) 
     cell.customImage.image = (image as UIImage) 
     return cell 
    } 
} 

и

import UIKit 
import CoreData 

protocol sendDetailsToMVCDelegate { 
    func sendDetailsToMVC(name: String, image: UIImage) 
} 

class DetailsViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITableViewDataSource, UITableViewDelegate, sendNameToDetailsViewControllerDelegate { 


@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var recipeImage: UIImageView! 
@IBOutlet weak var tableView: UITableView! 
var ingredientsList = [""] 
var delegateDetails: sendDetailsToMVCDelegate? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let howToDoButton = UIBarButtonItem(title:"How To Do", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showHowToDoScreen")) 
    navigationItem.rightBarButtonItem = howToDoButton 
    let newIngredientButton = UIBarButtonItem(title:"New Ingredient", style: UIBarButtonItemStyle.Plain, target:self, action: Selector("showNewIngredientScreen")) 
    navigationItem.leftBarButtonItem = newIngredientButton 

    //Picker imagem pelo toque 
    let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "chooseImage:") 
    tapGestureRecognizer.numberOfTapsRequired = 1 
    recipeImage.addGestureRecognizer(tapGestureRecognizer) 
    recipeImage.userInteractionEnabled = true 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return ingredientsList.count 
} 

func addNameToDetailsViewController(nameToDetail: NSString) { 
    ingredientsList.append(nameToDetail as String) 
    if tableView == nil { 
     return 
    } 
    tableView!.reloadData() 
} 

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

    let row = indexPath.row 
    let ingredientName = ingredientsList[row] 
    var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil) 
    cell.textLabel!.text = ingredientName 
    return cell 

} 

//Picka a imagem pelo toque, acessando a PhotoLibrary 
func chooseImage(recognizer: UITapGestureRecognizer) { 
    let imagePicker: UIImagePickerController = UIImagePickerController() 
    imagePicker.delegate = self 
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
    self.presentViewController(imagePicker, animated: true, completion: nil) 
} 

//Ao selecionar a imagem, coloca-a na tela tocada 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject:AnyObject]) { 
    let pickedImage: UIImage = (info as NSDictionary).objectForKey(UIImagePickerControllerOriginalImage) as! UIImage 
    // small picture 
    let smallPicture = scaleImageWith(pickedImage, newSize: CGSizeMake(75,75)) 
    var sizeOfImageView:CGRect = recipeImage.frame 
    sizeOfImageView.size = smallPicture.size 
    recipeImage.frame = sizeOfImageView 
    recipeImage.image = smallPicture 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 


func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 

func scaleImageWith(image:UIImage, newSize: CGSize) -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0) 
    image.drawInRect(CGRectMake(0,0, newSize.width, newSize.height)) 
    let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return newImage 
} 

@IBAction func showNewIngredientScreen() { 
    let newIngredient = AddIngredientViewController(delegate: self) 
     if let navigation = navigationController { 
      navigation.pushViewController(newIngredient, animated: true) 
     } 
    } 

@IBAction func showHowToDoScreen() { 
    let howToDo = HowToDoViewController(nibName: "HowToDoViewController", bundle: nil) 
    if let navigation = navigationController { 
     navigation.pushViewController(howToDo, animated: true) 
    } 
} 



@IBAction func addButton(sender: AnyObject) { 

    if nameTextField == nil || recipeImage == nil { return } 
    if recipeImage == nil { return } 

    let nameLabel = nameTextField.text 
    let imageView = recipeImage.image 

    if delegateDetails == nil { return } 
    delegateDetails?.sendDetailsToMVC(nameLabel, image: imageView!) 

    println("button pressed, name \(nameLabel) and image \(imageView) added.") 

    if let navigation = self.navigationController { 
     navigation.popViewControllerAnimated(true) 
    } 
} 

Мой вопрос: я передавая информацию правильно? Является ли правильный способ хранения изображений, создающих массивы изображений, как я? Когда я нажимаю кнопку addButton, ничего не происходит, но у нее нет сбоев. Я уже в этом вопросе уже довольно давно, и я был бы очень благодарен, если бы кто-то указал на меня, что случилось.

Кстати, я новичок в Swift, поэтому простите меня за любые ошибки n00b.

Спасибо!

+0

Мне удалось сделать работу AddButton удалением делегата if == nil {return}, но текст и изображение по-прежнему не попадают в первый контроллер представления, он остается пустым. Кто-нибудь знает, почему? –

ответ

0

Должно быть таким же, как в вашем other question. В функции addButton вы устанавливаете делегат, если не nil, а не в случае необходимости. Поэтому удалите if delegateDetails == nil { return } из DetailViewControler - addButton, и он должен работать.

+0

Это действительно работает, но изображение и текст по-прежнему не идут на метку и изображение в первом диспетчере представлений. Ты знаешь почему? –

+0

Благодарим за ваше терпение! –

+0

вы пропустили 'tableView.reloadAllComponents()' в 'sendDetailsToMVC (...)' – Michael

Смежные вопросы