无法设置 NavigationItem 的 TintColor
The NavigationItem's TintColor can not be set
我的情况:
有一个View_A(UICollectionViewController
&UICollectionViewCell
)和View_B(UIViewController
)。当我用 StoryBoard
中的 Segue
触摸 View_A 中的一个单元格时,我想切换到 View_B。
在StoryBoard
中,我将View_A和View_B连接到Push Segue
,标识符是SegueToView_B
。
switchViews 的功能刚刚好。
我的问题:
有了Push Segue
,我不需要加一个BackButton(NavigationItem
)返回View_A,因为有一个'NavigationItem' 由系统自动创建。我尝试了其他类型的 segues,例如 Modal
、Popover
,并且 NavigationItem
不是自动创建的。我想问为什么?
我想为系统自动创建的NavigationItem
设置特定的颜色,而不是默认的蓝色,但我没有找到。之后我只是在 prepareForSegue()
中设置了颜色,但它没有用。请告诉如何设置它的具体颜色?
我的代码:
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
self.collectionView?.setPresenting(true, animated: true, completion: nil)
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
self.selectedCard = delegate.otherCards[indexPath.row]
self.performSegueWithIdentifier("SegueToView_B", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
if identifier == "SegueToView_B" {
let myOtherCardViewController = segue.destinationViewController as? View_BViewController
myOtherCardViewController!.otherCard = self.selectedCard
myOtherCardViewController!.navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor() // Failed to work!!!
myOtherCardViewController?.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor() // Failed to work, too!!!
}
}
}
感谢您的帮助。
伊桑·乔
要为该导航栏设置 tintColor
:
myOtherCardViewController.navigationBar.tintColor = .whiteColor()
为什么使用Modal或PopOver时没有Navigationbar?因为这就是 Modal 和 Popover 的工作方式!您必须为与模态转场连接的视图创建另一个导航控制器,如下所示:
我正在使用的另一种技术是,创建单个 NavigationController class,并设置所有需要的属性(颜色、字体等),然后 link Storyboard 中的所有 NavigationControllers NavigationController class.
有了它,您就不必重新配置每个 NavigationController。
您的解决方案
您可以在 viewDidLoad
方法中设置隐藏在 View_B 控制器中的后退按钮。
class View_BViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true;
// Do any additional setup after loading the view.
}
}
要设置色调颜色,您必须创建 UINavigationController
的子 class,并将 class 分配给 UIStoryboard
中的 UINavigationController
你的子class看起来像这样,设置色调,
class navigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBar.barStyle = UIBarStyle.Default
self.navigationBar.tintColor = UIColor.redColor()
// Do any additional setup after loading the view.
}
//Other stuff
}
希望对您有所帮助!!
我的情况:
有一个View_A(
UICollectionViewController
&UICollectionViewCell
)和View_B(UIViewController
)。当我用StoryBoard
中的Segue
触摸 View_A 中的一个单元格时,我想切换到 View_B。在
StoryBoard
中,我将View_A和View_B连接到Push Segue
,标识符是SegueToView_B
。switchViews 的功能刚刚好。
我的问题:
有了
Push Segue
,我不需要加一个BackButton(NavigationItem
)返回View_A,因为有一个'NavigationItem' 由系统自动创建。我尝试了其他类型的 segues,例如Modal
、Popover
,并且NavigationItem
不是自动创建的。我想问为什么?我想为系统自动创建的
NavigationItem
设置特定的颜色,而不是默认的蓝色,但我没有找到。之后我只是在prepareForSegue()
中设置了颜色,但它没有用。请告诉如何设置它的具体颜色?
我的代码:
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
self.collectionView?.setPresenting(true, animated: true, completion: nil)
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
self.selectedCard = delegate.otherCards[indexPath.row]
self.performSegueWithIdentifier("SegueToView_B", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
if identifier == "SegueToView_B" {
let myOtherCardViewController = segue.destinationViewController as? View_BViewController
myOtherCardViewController!.otherCard = self.selectedCard
myOtherCardViewController!.navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor() // Failed to work!!!
myOtherCardViewController?.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor() // Failed to work, too!!!
}
}
}
感谢您的帮助。
伊桑·乔
要为该导航栏设置 tintColor
:
myOtherCardViewController.navigationBar.tintColor = .whiteColor()
为什么使用Modal或PopOver时没有Navigationbar?因为这就是 Modal 和 Popover 的工作方式!您必须为与模态转场连接的视图创建另一个导航控制器,如下所示:
我正在使用的另一种技术是,创建单个 NavigationController class,并设置所有需要的属性(颜色、字体等),然后 link Storyboard 中的所有 NavigationControllers NavigationController class.
有了它,您就不必重新配置每个 NavigationController。
您的解决方案
您可以在
viewDidLoad
方法中设置隐藏在 View_B 控制器中的后退按钮。class View_BViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.navigationItem.hidesBackButton = true; // Do any additional setup after loading the view. } }
要设置色调颜色,您必须创建
UINavigationController
的子 class,并将 class 分配给UIStoryboard
中的 UINavigationController
你的子class看起来像这样,设置色调,
class navigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBar.barStyle = UIBarStyle.Default
self.navigationBar.tintColor = UIColor.redColor()
// Do any additional setup after loading the view.
}
//Other stuff
}
希望对您有所帮助!!