我正在尝试从tableview控制器B传递图标和名称,以通过委托来查看控制器A.
简单来说,用户会看到ViewController A :(此处显示)
ViewController A和源代码
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.
}
}
因此,当用户点击此单元格时,将向用户呈现另一个显示图标列表的视图控制器(viewController B)。以下是此示例的屏幕截图和源代码。
ViewController B
以下是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!))")
}
}
}
问题
我想将所选图标传回主视图控制器,同时显示名称和图标图像。 (在主视图控制器中,有一个UIImage对象,但您无法在UILable旁边看到它' select')
我怎样才能做到这一点?我使用这个类似的代码来完成UIColor,但它起作用但它似乎不能用于图像。
会有很大帮助
答案 0 :(得分:3)
将DestinationViewController中的值设置回Primary(First)ViewController
1。实施协议,例如创建一个名为protocol.swift的文件。
protocol SetIconValueDelegate {
func didChoose(icon:Icon)
}
2. 在第二个ViewController上设置委托
class yourNextViewControllerClass {
var delegate:SetIconValueDelegate?
3. 在加载secondViewController时设置委托(带有图标详细信息)
if(segue.identifier == "yourIdentifierInStoryboard") {
var yourNextViewController = (segue.destinationViewController as yourNextViewControllerClass)
yourNextViewController.delegate = self
4. 将功能添加到FirstViewController
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中设置委托
class FirstViewController: UIViewController, setIconValueDelegate {
答案 1 :(得分:0)
您可以使用Update CTLSTAGE.VMR226DEV_HSD_SUB A
set A.ATM_IP_IND = 'ATM'
where (A.SW_SITE_CD,A.DEV_NM) = (
select SW_SITE_CD,DEV_NM
from CTLSTAGE.ATM_IP_REF
where FTTC_E_IND = 'Y'
) ;
COMMIT ;
方法将数据发送回上一个视图控制器。
IN CURRENT VC:
delegate(protocol)
在班上制作一个var。
protocol MyProtocol: class
{
func sendArrayToPreviousVC(myArray:[AnyObject])
}
现在,在弹出视图控制器时调用协议方法,使用"属性"数组作为参数。 (在你的情况下从选择行传递你想要的图标或名称)
weak var mDelegate:MyProtocol?
以前的VC:
在您之前的VC中,当您按下当前VC时,将mDelegate属性设置为self。
mDelegate?.sendArrayToPreviousVC(properties)
现在在之前的VC中实现协议方法。
currentVC.mDelegate = self
//PUSH VC
这是如何在导航堆栈中发回数据的场景。根据您的数据和要求进行调整。
您应该使用didselect行委托方法来传递数据。 希望这会有所帮助:)