2015-08-10 1 views
1

У меня есть TableViewController внутри TabViewController внутри NavigationController с навигацией название и пункт, как показано здесь:
enter image description hereTableViewController внутри TabViewController внутри NavigationViewController не показывать навигацию заголовок и пункт во время выполнения, но показывает в раскадровка

На время выполнения , панель навигации есть, но заголовок и элемент добавления не показаны, как показано здесь: (не обращайте внимания на белую пустоту, на моем устройстве ее работа, но не в симуляторе - я спросил об этом в stackOverflow, но все равно нет раствор)
enter image description here
Другой элемент TabBar указывает на обычный UIView, который также не отображает название панели навигации и позицию панели.

Я попытался добавить еще один UIView, который будет посредником между TabBarViewController и TableViewController, и это устранило проблему, но это заставило меня потерять функциональность TabBar в моем TableViewController. Я попытался указать на панель навигации из моего TableViewController, но такие методы, как «viewDidAppear» или navigationBar Class, оттуда недоступны, поскольку он действует как контроллер для tableView.

TableViewController Класс

import UIKit 
import Parse 
import ParseUI 

class MeetsTableViewController: PFQueryTableViewController { 

// Initialise the PFQueryTable tableview 
override init(style: UITableViewStyle, className: String!) { 
    super.init(style: style, className: className) 
    //self.tableView.contentInset = UIEdgeInsetsZero; 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    // Configure the PFQueryTableView 
    self.parseClassName = "Meets"; 
    self.pullToRefreshEnabled = true; 
    self.textKey="city"; 
    self.paginationEnabled = false; 

} 


// Define the query that will provide the data for the table view 
override func queryForTable() -> PFQuery { 
    let query = PFQuery(className: "Meets"); 
    query.orderByDescending("numberOfComming"); 
    return query; 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell { 

    var cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! CarTableViewCell!; 

    if cell == nil { 
     cell = CarTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "MyCell"); 
    } 
    if let cityName = object?["city"] as? String{ 
     cell?.meetName?.text = "מפגש ב\(cityName)"; 
    } 
    if let address = object?["address"] as? String{ 
     cell?.meetAddress?.text = address; 
    } 
    if let date = object?["date"] as? String{ 
     cell?.meetDate?.text = date; 
    } 
    if let time = object?["time"] as? String{ 
     cell?.meetTime?.text = time; 
    } 
    if let people = object?["numberOfComming"] as? Int{ 
     cell?.peopleAttending?.text = "\(people)"; 
    } 

    if let thumbnail = object?["meetImg"] as? PFFile { 

     thumbnail.getDataInBackgroundWithBlock{ 
      (imageData, error) -> Void in 
      if error == nil { 
       let image = UIImage(data: imageData!) 
       cell.meetImage.image = image 
      } 
     } 
    } 

    return cell; 
} 

//delegate method 
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    moveToDetail(); 
} 

func moveToDetail(){ 
    let meetDetail=storyboard?.instantiateViewControllerWithIdentifier("meet") as! MeetDetailViewController; 

    if let indexPath = self.tableView.indexPathForSelectedRow { 
     let row = Int(indexPath.row); 
     meetDetail.currentObject = (objects?[row] as? PFObject) 
    } 
    navigationController?.showViewController(meetDetail, sender: self); 
} 

} 

TabViewController Класс

import UIKit 

class MeetingsTabViewControllerViewController: UITabBarController { 

override func viewDidLoad() { 

    super.viewDidLoad() 
    // set red as selected background color 
    let numberOfItems = CGFloat(tabBar.items!.count) 
    let tabBarItemSize = CGSize(width: tabBar.frame.width/numberOfItems, height: tabBar.frame.height) 
    tabBar.selectionIndicatorImage = UIImage.imageWithColor(UIColor(hexString: "#8c332b")!, size: tabBarItemSize).resizableImageWithCapInsets(UIEdgeInsetsZero); 
    tabBar.backgroundImage = UIImage.imageWithColor(UIColor(hexString: "#c1463e")!, size: tabBarItemSize).resizableImageWithCapInsets(UIEdgeInsetsZero); 
    // item selected color 
    tabBar.tintColor = UIColor.whiteColor(); 
    // remove default border 
    tabBar.frame.size.width = self.view.frame.width + 4; 
    tabBar.frame.origin.x = -2; 

} 
} 

extension UIImage { 

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { 
    let rect: CGRect = CGRectMake(0, 0, size.width, size.height); 
    UIGraphicsBeginImageContextWithOptions(size, false, 0); 
    color.setFill(); 
    UIRectFill(rect); 
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

} 

NavigationViewController Класс

import UIKit 

class MeetsNavigationViewController: UINavigationController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 



} 
+0

Можете ли вы добавить пример кода? Поэтому мы можем помочь вам лучше. – Karlos

+0

Несомненно, только что добавил, спасибо –

ответ

2

Решено
Похоже, что добавление элементов в панель навигации из дочерних элементов панели вкладок невозможно, но добавление элементов в контроллер панели вкладок возможно, так что это то, что я сделал. И я просто изменил заголовок в соответствии с выбранной мной вкладкой. Я добавил этот метод в контроллер панели вкладок:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    if item.tag==0{ 
     navigationItem.title="המפגשים שלי"; 
    }else{ 
     navigationItem.title="כל המפגשים"; 
    } 
} 
Смежные вопросы