gpt4 book ai didi

ios - 将图标和名称从 TableviewController B 传递到 TableviewController A

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:29 26 4
gpt4 key购买 nike

我正在尝试通过委托(delegate)将 TableView Controller B 中的图标和名称传递给 View Controller A。

为了简单起见,向用户展示了 ViewController A:(此处显示)

ViewController A及源码

enter image description here

ViewController一源码

 //
// MasterTableViewController.swift
// Sample image
//
//

import UIKit

class MasterTableViewController: UITableViewController, IconselectedDelegate {

@IBOutlet weak var passedIconName: UILabel!

var tempname: String?

override func viewDidLoad() {
super.viewDidLoad()

self.title = "Master"
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)

}

func iconName(iconName: String) -> String {

self.tempname = iconName

self.passedIconName.text = "\(iconName)"

return tempname!
}

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

因此,当用户点击此单元格时,用户会看到另一个显示图标列表的 View Controller (viewController B)。这是此示例的屏幕截图和源代码。

ViewController B

enter image description here

这是 Viewcontroller B 的示例代码ViewController B代码

//
// IconTableViewController.swift
// Sample image
//
// Created by me on 4/18/16.
//

import UIKit

protocol IconselectedDelegate {
func iconName(iconName: String)-> String
}

class IconTableViewController: UITableViewController {

enum Icon: Int {
case Study
case Apple

var icon: UIImage {
switch self {
case.Study: return UIImage(named: "study")!
case.Apple: return UIImage(named: "apple")!
}
}
}


var icons = ["Study", "Apple"]

var delegate: IconselectedDelegate? = nil
var selectedIndex = 0

// holding vars
var image: UIImage?
var name: String?


override func viewDidLoad() {
super.viewDidLoad()


self.title = "Icon selection"


}

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 Incomplete implementation, return the number of sections
return 1
}

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

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell: UITableViewCell! = tableView.cellForRowAtIndexPath(indexPath)

if cell.accessoryType == UITableViewCellAccessoryType.None {


if indexPath.row == 0 {

self.name = icons[0]

} else if indexPath.row == 1 {
self.name = icons[1]
}


cell.accessoryType = UITableViewCellAccessoryType.Checkmark
self.navigationController?.popToRootViewControllerAnimated(true)
}

selectedIndex = indexPath.row

tableView.reloadData()
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}


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


let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! IconTableViewCell



// Configure the cell...
cell.iconName.text = icons[indexPath.row]

if let iconIndex = Icon(rawValue: indexPath.row) {

cell.iconPreview.image = iconIndex.icon
}

return cell
}

override func viewWillDisappear(animated: Bool) {
super.viewWillAppear(true)

if name == nil {
delegate?.iconName("None")
} else {
delegate?.iconName(name!)
print("Delegate left with \(delegate?.iconName(name!))")
}
}


}

问题

我想将选定的图标传递回显示名称和图标图像的主视图 Controller 。 (在主视图 Controller 中,有一个 UIImage 对象,但您无法在 UILable 旁边看到它说“选择”)

我怎样才能做到这一点?我使用这个类似的代码来完成 UIColor 并且它有效,但它似乎不适用于图像。

很有帮助

最佳答案

将 DestinationViewController 中的值设置回您的主要(第一个)ViewController

1. 实现一个协议(protocol),例如创建一个名为 protocol.swift 的文件。

    protocol SetIconValueDelegate {
func didChoose(icon:Icon)
}

2. 在您的第二个 ViewController 上设置委托(delegate)

    class yourNextViewControllerClass {

var delegate:SetIconValueDelegate?

3. 在加载第二个 ViewController 时设置委托(delegate)(带有图标详细信息)

    if(segue.identifier == "yourIdentifierInStoryboard") {

var yourNextViewController = (segue.destinationViewController as yourNextViewControllerClass)
yourNextViewController.delegate = self

4.给FirstViewController添加Function

    func didChoose(icon:Icon) {
// set here whatever you want
}

5. 从您的 SecondViewController 调用此函数

     delegate?.didChoose(icon) // this will send your "icon" object - run this from didSelectRowAtIndexPath

6. 在您的 FirstViewController 中设置委托(delegate)

    class FirstViewController: UIViewController, setIconValueDelegate {

关于ios - 将图标和名称从 TableviewController B 传递到 TableviewController A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36687328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com