Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:tabcontroller中的表格只有在';第一张账单是什么?_Ios_Uitableview_Swift_Uitabbarcontroller - Fatal编程技术网

Ios Swift:tabcontroller中的表格只有在';第一张账单是什么?

Ios Swift:tabcontroller中的表格只有在';第一张账单是什么?,ios,uitableview,swift,uitabbarcontroller,Ios,Uitableview,Swift,Uitabbarcontroller,我附上了示例代码,说明了我遇到的问题。出于某种原因,tableview需要成为tableviewcontroller识别导航栏的第一个选项卡。这个问题是这个问题的延伸 这里有一个指向实际示例项目的链接 AppDelegate: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { w

我附上了示例代码,说明了我遇到的问题。出于某种原因,tableview需要成为tableviewcontroller识别导航栏的第一个选项卡。这个问题是这个问题的延伸

这里有一个指向实际示例项目的链接

AppDelegate:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let containerViewController:ContainerViewController = ContainerViewController()
    window!.rootViewController = containerViewController
    window!.makeKeyAndVisible()
    return true
}
ContainerViewController.swift:

class ContainerViewController: UIViewController, LoginDelegate {

var mainNavigationController: UINavigationController!
var myTabBarController: UITabBarController!
var loginViewController: LoginViewController!


override func viewDidLoad() {
    super.viewDidLoad()
    var mainStoryboard: UIStoryboard =  UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    myTabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("myTabBarController") as? UITabBarController
    loginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginViewController") as? LoginViewController
    loginViewController.delegate = self

    mainNavigationController = UINavigationController(rootViewController: loginViewController)
    view.addSubview(mainNavigationController.view)
    addChildViewController(mainNavigationController)
    mainNavigationController.didMoveToParentViewController(self)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func loginPressed() {
    self.mainNavigationController.pushViewController(self.myTabBarController, animated: false)
}
@objc
protocol LoginDelegate{
func loginPressed()
}

class LoginViewController: UIViewController {

@IBOutlet var loginBtn: UIButton!
 var delegate: LoginDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBAction func loginPressed(sender: AnyObject) {
    delegate?.loginPressed()
}
}
class FirstTabViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.topViewController.navigationItem.setHidesBackButton(true, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
}
class SecondTabViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}
}

LoginViewController.swift:

class ContainerViewController: UIViewController, LoginDelegate {

var mainNavigationController: UINavigationController!
var myTabBarController: UITabBarController!
var loginViewController: LoginViewController!


override func viewDidLoad() {
    super.viewDidLoad()
    var mainStoryboard: UIStoryboard =  UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    myTabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("myTabBarController") as? UITabBarController
    loginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginViewController") as? LoginViewController
    loginViewController.delegate = self

    mainNavigationController = UINavigationController(rootViewController: loginViewController)
    view.addSubview(mainNavigationController.view)
    addChildViewController(mainNavigationController)
    mainNavigationController.didMoveToParentViewController(self)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func loginPressed() {
    self.mainNavigationController.pushViewController(self.myTabBarController, animated: false)
}
@objc
protocol LoginDelegate{
func loginPressed()
}

class LoginViewController: UIViewController {

@IBOutlet var loginBtn: UIButton!
 var delegate: LoginDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBAction func loginPressed(sender: AnyObject) {
    delegate?.loginPressed()
}
}
class FirstTabViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.topViewController.navigationItem.setHidesBackButton(true, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
}
class SecondTabViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}
FirstTabViewController.swift:

class ContainerViewController: UIViewController, LoginDelegate {

var mainNavigationController: UINavigationController!
var myTabBarController: UITabBarController!
var loginViewController: LoginViewController!


override func viewDidLoad() {
    super.viewDidLoad()
    var mainStoryboard: UIStoryboard =  UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    myTabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("myTabBarController") as? UITabBarController
    loginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginViewController") as? LoginViewController
    loginViewController.delegate = self

    mainNavigationController = UINavigationController(rootViewController: loginViewController)
    view.addSubview(mainNavigationController.view)
    addChildViewController(mainNavigationController)
    mainNavigationController.didMoveToParentViewController(self)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func loginPressed() {
    self.mainNavigationController.pushViewController(self.myTabBarController, animated: false)
}
@objc
protocol LoginDelegate{
func loginPressed()
}

class LoginViewController: UIViewController {

@IBOutlet var loginBtn: UIButton!
 var delegate: LoginDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBAction func loginPressed(sender: AnyObject) {
    delegate?.loginPressed()
}
}
class FirstTabViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.topViewController.navigationItem.setHidesBackButton(true, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
}
class SecondTabViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}
SecondTabViewController.swift:

class ContainerViewController: UIViewController, LoginDelegate {

var mainNavigationController: UINavigationController!
var myTabBarController: UITabBarController!
var loginViewController: LoginViewController!


override func viewDidLoad() {
    super.viewDidLoad()
    var mainStoryboard: UIStoryboard =  UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    myTabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("myTabBarController") as? UITabBarController
    loginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginViewController") as? LoginViewController
    loginViewController.delegate = self

    mainNavigationController = UINavigationController(rootViewController: loginViewController)
    view.addSubview(mainNavigationController.view)
    addChildViewController(mainNavigationController)
    mainNavigationController.didMoveToParentViewController(self)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func loginPressed() {
    self.mainNavigationController.pushViewController(self.myTabBarController, animated: false)
}
@objc
protocol LoginDelegate{
func loginPressed()
}

class LoginViewController: UIViewController {

@IBOutlet var loginBtn: UIButton!
 var delegate: LoginDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBAction func loginPressed(sender: AnyObject) {
    delegate?.loginPressed()
}
}
class FirstTabViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.topViewController.navigationItem.setHidesBackButton(true, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
}
class SecondTabViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}

我通读了您的代码并运行了您的项目,我相信问题在于您正在将UITabBarController嵌入UINavigationController中。您要做的是将每个UIViewController(或UITableViewController)嵌入到自己的UINavigationController中,然后将这些导航控制器设置为UITabBarController的视图控制器(即,您可以在情节提要上进行设置)

这就是为什么您的第二个选项卡(隐藏在导航栏下的第一行)上的tableviewcontroller的内容插入也存在问题的原因。嵌入UITabBarController的UINavigationController没有通过UITabBarController将正确的插入传递给其视图控制器

我对您的项目做了一些更改:


Main.storyboard

我将每个UITabBarController的视图控制器嵌入到它自己的UINavigationController中


ContainerViewController

我将loginViewController和myTabBarController的视图添加为容器VC视图的子视图,然后将每个控制器添加为容器VC的子控制器。如果您想要导航栏,仍然可以将loginViewController嵌入UINavigationController中,但为了简单起见,我删除了它


FirstTabViewController

由于此视图控制器现在嵌入到情节提要中自己的UINavigationController中,因此它可以像self.navigationItem一样访问其navigationItem


非常感谢马克!!我一直在等待答复,因为在您最初的答复之后,我与导航控制器有问题。我认为你的扩展答案将帮助我走出困境!!