【发布时间】:2016-11-30 14:38:44
【问题描述】:
我有三个视图控制器,导航栏的左右两侧各有两个按钮,如下图所示。
我以编程方式创建这些按钮,而不是在每个相应的视图控制器 (VC) 中编写代码,我决定编写一个 Helper 类来创建这些按钮。
// Note: I am using FontAwesome as a third-party library.
class Helper: NSObject {
static func loadNavBarItems(vc: UIViewController) {
let profileButton = UIBarButtonItem()
let addButton = UIBarButtonItem()
let attributes = [NSFontAttributeName: UIFont.fontAwesome(ofSize: 20)] as [String: Any]
profileButton.setTitleTextAttributes(attributes, for: .normal)
addButton.setTitleTextAttributes(attributes, for: .normal)
profileButton.title = String.fontAwesomeIcon(name: .userCircle)
addButton.title = String.fontAwesomeIcon(name: .plus)
vc.navigationItem.leftBarButtonItem = profileButton
vc.navigationItem.rightBarButtonItem = addButton
}
func segueToProfile(vc: UIViewController) { // I need help here. }
}
然后我从每个 VC 的viewDidLoad() 中调用Helper.loadNavBarItems(vc: self)。
我现在要做的是在按下其中一个按钮时触发 segue(假设它是配置文件按钮)。所以,我需要定义profile.action。因此,在 Helper 类中,我必须编写一个函数 segueToProfile,它接受一个视图控制器 (vc) 并运行 performSegueWithIdentifier。
问题是,我不完全了解如何通过选择器传递不同类型的参数,而且我可能不擅长谷歌搜索,但我找不到任何足够接近我的问题让我了解如何实现这个。
非常感谢您的帮助。
供参考,this is the structure of my Storyboard。
编辑:如故事板结构截图所示,我已经创建了从三个视图控制器到目标视图控制器的转场。
【问题讨论】:
-
您愿意通过选择器发送什么样的参数?同样在您的故事板模拟中,您正在展示导航控制器。所以你应该明白destinationController 将是NavigationController,而不是ViewCotnroller。另一件事是,您可能应该为 UIViewController 创建一个扩展并替换所有创建和分配 BarButtons 的代码。这样你就可以避免将 UIViewController 参数传递给
loadNavBarItemsfunc -
@noir_eagle 谢谢,但我的问题在于理解 UIBarButtonItem 操作和选择器。我试图在点击其中一个 UIBarButtonItems 时触发 segue,并且我试图弄清楚在使用
profileButton.action时如何将参数传递给选择器 -
这个导航控制器在每个页面上都有这些按钮吗?还是只有一个 ViewController?
-
按钮位于嵌套在导航控制器中的每个视图控制器(类型
UIViewController)上。
标签: ios swift segue selector uibarbuttonitem