如何在 SWIFT3 XCODE 8.2 的 IOS 应用程序中显示 Snackbar 的操作中的特定视图
Posted
技术标签:
【中文标题】如何在 SWIFT3 XCODE 8.2 的 IOS 应用程序中显示 Snackbar 的操作中的特定视图【英文标题】:How to display a specific view from the action of the Snackbar in IOS app in SWIFT3 XCODE 8.2 【发布时间】:2018-12-03 15:54:24 【问题描述】:如何通过 ios 中 Snackbar 的操作在 SWift 3 中显示我的 IOS 应用程序的另一个视图?我尝试了以下代码(即,一旦出现小吃栏并点击小吃栏的操作部分,则应打开 PatientViewController
的新视图,ID 为 PatientVC
):
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
let message = MDCSnackbarMessage()
let action = MDCSnackbarMessageAction()
let actionhandler = () in
let actionmessage = MDCSnackbarMessage()
actionmessage.text = "Button Click Success"
MDCSnackbarManager.show(actionmessage)
let storyboard = UIStoryboard(name: "Main", bundle: nil);
let vc = storyboard.instantiateViewController(withIdentifier: "PatientVC") as! PatientViewController;
self.navigationController?.pushViewController(vc, animated: true);
action.handler = actionhandler
action.title = "Done"
message.action = action
message.text = "Welcome"
MDCSnackbarManager.show(message)
PateintVC
是 id,PatientViewController
是我想显示的 viewController
的名称。但这给了我一个错误,EncounterFilterTableViewCell
没有成员 navigationController
。只要我在我的代码中继承UIViewController
和UITableViewCell
。来自类UITableViewCell
和UIviewController
的多重继承是错误的。
应该怎么做才能显示由PatientViewController
表示的视图,ID 为PatientVC
。下面是我的班级的完整代码,其中有我的 Snackbar 代码。
import UIKit
import MaterialComponents.MaterialSnackbar
class EncounterFilterTableViewCell: UITableViewCell
@IBOutlet weak var filterCheckBox: CheckBox!
@IBOutlet weak var filterNameTextView: UITextView!
var filterIndex : [String : Int] = [
getDataFromAppLanguage("Final") + " " + getDataFromAppLanguage("Diagnosis") : 0,
getDataFromAppLanguage("Diagnosis") : 1,
getDataFromAppLanguage("Test") : 2,
getDataFromAppLanguage("Operation") : 3,
getDataFromAppLanguage("Drug") : 4,
getDataFromAppLanguage("Media") : 5,
getDataFromAppLanguage("FormsEn") : 6,
getDataFromAppLanguage("PatientEn") + " " + getDataFromAppLanguage("Status") : 7
]
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
@IBAction func filterBoxClicked(_ sender: AnyObject)
EncounterFilterViewController.updateFilterStatus(filterIndex[filterNameTextView.text]!)
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
let message = MDCSnackbarMessage()
let action = MDCSnackbarMessageAction()
let actionhandler = () in
let actionmessage = MDCSnackbarMessage()
actionmessage.text = "Button Click Success"
MDCSnackbarManager.show(actionmessage)
let storyboard = UIStoryboard(name: "Main", bundle: nil);
let vc = storyboard.instantiateViewController(withIdentifier: "PatientVC") as! PatientViewController;
self.navigationController?.pushViewController(vc, animated: true);
action.handler = actionhandler
action.title = "Done"
message.action = action
message.text = "Welcome"
MDCSnackbarManager.show(message)
【问题讨论】:
问题现已解决。而不是在单元格的 setSelected 方法中使用小吃店代码。在特定 Cell 的 Table View Controller 的 didSelect 方法中添加以下代码。 【参考方案1】:更改您的自定义单元格以使其工作 -
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
let componentFrame = CGRect(x: 20, y: 20, width: 40, height: 30)
toggleSwitch.frame = componentFrame
toggleSwitch.addTarget(self, action: #selector(SwitchTableViewCell.switchAction), for: .valueChanged)
self.contentView.addSubview(toggleSwitch);
convenience init(style: UITableViewCellStyle, reuseIdentifier: String?, callingView : UIViewController)
self.init(style: style, reuseIdentifier: reuseIdentifier)
callingViewController = callingView
override func setSelected(_ selected: Bool, animated: Bool)
let message = MDCSnackbarMessage()
message.text = "The groundhog (Marmota monax) is also known as a woodchuck or whistlepig."
let action = MDCSnackbarMessageAction()
let actionHandler = () in
let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier: "DetailView")
self.callingViewController?.navigationController?.pushViewController(vc, animated: true)
action.handler = actionHandler
action.title = "OK"
message.action = action
MDCSnackbarManager.show(message)
在 ViewController 中,像这样初始化单元格-
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var cell : SwitchTableViewCell? = tableView.dequeueReusableCell(withIdentifier: "TestIdentifier") as? SwitchTableViewCell
if(cell == nil)
cell = SwitchTableViewCell(style: .default, reuseIdentifier: "TestIdentifier", callingView : self)
cell?.toggleSwitch.isOn = myData1[indexPath.row];
return cell!;
【讨论】:
以上是关于如何在 SWIFT3 XCODE 8.2 的 IOS 应用程序中显示 Snackbar 的操作中的特定视图的主要内容,如果未能解决你的问题,请参考以下文章
在 XCode 8.2 / Swift 3.0 中更改状态栏样式(没有“查看基于控制器的状态栏外观”)
Socket.IO 错误:zlib 没有这样的模块(Swift 3,Xcode 8.3)
如何更改xcode 8.3.3(swift3)的语言设置[重复]
如何使约束适用于横向和纵向(xcode 8.1 / swift3 / storyboard)