将导航栏标题设为按钮(快速)

时间:2019-03-18 22:28:36

标签: ios swift uinavigationcontroller uibutton titleview

我试图将导航栏的标题设置为自己的按钮。我的应用程序中的用户可以具有多个配置文件,并且导航栏标题显示其当前所选配置文件的用户名。按下此按钮将弹出一个可用配置文件列表,供您选择(handleShowProfiles)。由于某些原因,标题会显示但不能用作按钮,它只是静态文本,触摸它不会执行任何操作。

let changeProfileContainer : UIView = {
    let container = UIView()
    container.frame = CGRect(x: 0, y: 0, width: 200, height: 40)

    let button = UIButton(type: .custom)
    button.setTitle("@username ▼", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.frame = container.frame
    button.addTarget(self, action: #selector(handleShowProfiles), for: .touchUpInside)

    container.addSubview(button)
    return container
}()

func configureNavBar() {
    self.navigationController?.navigationBar.tintColor = .black
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "send"), style: .plain, target: self, action: #selector(handleSubmitPost))
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "drafts"), style: .plain, target: self, action: #selector(handleDrafts))
    self.navigationItem.titleView = changeProfileContainer
}

有什么想法为什么按钮部分不起作用?在Apple的文档中,它说您必须将按钮放入视图中,使按钮类型自定义,然后将按钮的框架更改为其默认值(0、0、0、0)。我很确定这是我搞砸的地方,但我不知道。

1 个答案:

答案 0 :(得分:1)

链接到self invocations in computed property -请参阅艾哈迈德·F(Ahmad F)的答案的最后一部分

不知道为什么,但是计算属性中的选择器似乎不起作用。

我尝试添加容器视图而不对其进行计算,然后单击按钮。

func configureNavBar() {
    self.navigationController?.navigationBar.tintColor = .black
    let container = UIView()
    container.frame = CGRect(x: 0, y: 0, width: 200, height: 40)

    let button = UIButton(type: .custom)
    button.setTitle("@username ▼", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.frame = container.frame
    button.addTarget(self, action: #selector(pressTitle), for: .touchUpInside)
    container.addSubview(button)
    navigationItem.titleView = container
}