ここに示すように、ナビゲーション タイトルと項目を含む NavigationController 内の TabViewController 内に TableViewController があります。
実行時には、ナビゲーション バーは表示されますが、ここに示すように、タイトルと追加項目は表示されません。まだ解決策はありません)
他の TabBar アイテムは通常の UIView を指していますが、これもナビゲーション バーのタイトルとバー アイテムを表示していません。
TabBarViewController と TableViewController の間のメディエーターとなる別の UIView を追加しようとしましたが、これで問題は解決しましたが、TableViewController の TabBar 機能が失われました。TableViewController からナビゲーション バーを指そうとしましたが、tableView のコントローラーとして機能しているため、そこから「viewDidAppear」や navigationBar クラスなどのメソッドにアクセスできません。
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()
}
}