如何在Swift中的UITableViewController中创建一个navigationBar?

10

我是IOS的新手,

我想在UITableViewController中添加一个UINavigationBar,我尝试了以下代码:

var navBar: UINavigationBar = UINavigationBar(frame: CGRect(x:0, y:0, width:320, height:80))

那么,

self.view .addSubview(navBar)

谢谢

4个回答

15
你不能简单地像这样将一个NavigationBar添加到UITableViewController中。
拥有UINavigationControllerNavigationBar的最简单方法是从Storyboard开始。
步骤:
1. 从Object Library中将UITableViewController对象拖入Storyboard。 2. 高亮显示UITableViewController,然后转到 Edit -> Embed In - > Navigation Controller,如下图所示: enter image description here 3. 转到 File -> New -> File.. -> iOS -> Cocoa Touch Class,并创建一个自定义的TableViewController类,如下图所示: enter image description here 4. 最后,回到Storyboard并选择UITableViewController对象。 在identity inspector下,选择刚刚创建的自定义类,如下图所示: enter image description here 你可以随意使用自定义类文件。 如果需要,还可以添加自定义的UINavigationController类,并将其附加到Storyboard中的对象上。

谢谢,我知道那个方法,我能用编程的方式做同样的事情吗? - Tim
是的,您可以通过编程来完成它。苹果创建了故事板以使我们的生活更轻松。不使用它是一种浪费。但也不建议这样做,因为您可以从故事板中清楚地看到导航,但不能从代码本身中看到。代码越多=某人需要花费更多时间才能理解您的应用程序。如果您坚持要通过编程来完成它,您可以按照故事板上的流程进行操作。例如:创建自定义UINavigationViewController,然后使用initWithRootViewController:tableController - Ricky
抱歉再次打扰您,我已经创建了一个UINavigationController,如何编写initWithRootViewController:tableController的代码? - Tim
没关系,谢谢。我找到了另一种方法,在UINavigationController的viewDidLoad方法中,我编写了self.pushViewController(tableviewcontroller(), animated: true)。 - Tim
initWithRootViewController:tableController只是一个例子。我很高兴你找到了方法。 - Ricky
关于 Editor > Embed In > ... 的好提示。 - pkamb

5
如果仅仅是显示带有导航栏的模态UITableViewController,从代码中实现最简单的方法是使用UINavigationController并将UITableViewController作为rootViewController进行呈现:
呈现视图控制器:
let sourceSelectorTableViewController = SourceSelectorTableViewController()
let navigationController = UINavigationController(rootViewController: sourceSelectorTableViewController)

self.presentViewController(navigationController, animated: true, completion: nil)

目标模态UITableViewController:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancel")
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "done")
    self.title = "Pick a Source"
}
func cancel() {
    self.dismissViewControllerAnimated(true, completion: nil)
}

func done() {
    //save things
    self.dismissViewControllerAnimated(true, completion: nil)
}

2

最好的解决方案是将

UITableViewController

呈现为

UINavigationController

。这样做可以使界面更加清晰、易于导航。

        let topicsList = TopicsListViewController()
        let topicsListNavContrl = UINavigationController(rootViewController: topicsList)

        presentViewController(topicsListNavContrl, animated: true) { () -> Void in
            print("completed")
        }

-1

你可以通过编程实现这个功能。

 DataTableViewController *vc = [[DataTableViewController alloc] initWithStyle:UITableViewStylePlain];

    UINavigationController  *nav = [[UINavigationController alloc] initWithRootViewController:vc];


    [self presentViewController:nav animated:YES completion:nil];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接