如何使代码适应标签栏控制器

时间:2017-10-22 15:19:39

标签: uitabbarcontroller xcode9 swift4

我正在重做我的应用程序的导航,使其基于自定义UITabBarController。标签栏打开各种ViewController。这工作正常,但我现在得到以前工作的ViewController中的代码错误。

新的customTabBarController

import UIKit

class CustomTabBarController: UITabBarController {


override func viewDidLoad() {
    super.viewDidLoad()

    let feedController = feedVC() //Name of the view controller
    let firstNavigationController = UINavigationController(rootViewController: feedController)
    firstNavigationController.title = "Feed"
    firstNavigationController.tabBarItem.image = UIImage(named: "feed_icon")

    let clubController = moreVC() //Name of the view controller
    let secondNavigationController = UINavigationController(rootViewController: clubController)
    secondNavigationController.title = "Club"
    secondNavigationController.tabBarItem.image = UIImage(named: "club_icon")

    let recordController = moreVC() //Name of the view controller
    let thirdNavigationController = UINavigationController(rootViewController: recordController)
    thirdNavigationController.title = "Record"
    thirdNavigationController.tabBarItem.image = UIImage(named: "record_icon")

    let profileController = moreVC() //Name of the view controller
    let fourthNavigationController = UINavigationController(rootViewController: profileController)
    fourthNavigationController.title = "Profile"
    fourthNavigationController.tabBarItem.image = UIImage(named: "profile_icon")

    let moreController = moreVC() //Name of the view controller
    let fifthNavigationController = UINavigationController(rootViewController: moreController)
    fifthNavigationController.title = "More"
    fifthNavigationController.tabBarItem.image = UIImage(named: "more_icon")

    viewControllers = [firstNavigationController, secondNavigationController, thirdNavigationController, fourthNavigationController, fifthNavigationController]

    tabBar.isTranslucent = false

    // Color of menu bar set in AppDelegate.swift

}

}

feedVC

import UIKit
import Firebase

class feedVC: UIViewController {

@IBOutlet weak var tableView: UITableView!

var activityArray = [Activity]()
var userdataArray = [Userdata]()
var cellSpacingHeight: CGFloat = 10 // Sets the spacing between the cells

override func viewDidLoad() {
    super.viewDidLoad()

    if Auth.auth().currentUser == nil {
        let authVC = self.storyboard?.instantiateViewController(withIdentifier: "authVC") as? authVC
        self.present(authVC!, animated: true, completion: nil)
    }

    tableView.delegate = self
    tableView.dataSource = self

}

我得到的错误是: 线程1:EXC_BREAKPOINT(代码= 1,子代码= 0x102eb7b50)链接到feedVC中的以下代码。

 tableView.delegate = self
 tableView.dataSource = self

我得到的第二个错误与recordVC

有关
import UIKit
import MapKit

class recordVC: UIViewController, MKMapViewDelegate {

@IBOutlet weak var mapView: MKMapView!
var tileRenderer: MKTileOverlayRenderer!


// set initial location in Aspøya
let initialLocation = CLLocation(latitude: 63.011018, longitude: 7.914721)

// Set the zoom level of the location
let regionRadius: CLLocationDistance = 1000
func centerMapOnLocation(location: CLLocation) {
    let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
                                                              regionRadius, regionRadius)
    mapView.setRegion(coordinateRegion, animated: true)
}


func setupTileRenderer() {

   // Fetching the map file from URL below. The {x}, {y}, and {z} are replaced at runtime by an individual tile’s coordinate. The z-coordinate, or zoom-level is specified by how much the user has zoomed in the map. The x and y are the index of the tile given the section of the Earth shown. A tile needs to be supplied for every x and y for each zoom level supported.
    let template =  "https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=norgeskart_bakgrunn&zoom={z}&x={x}&y={y}&format=image/png"

    // Creates the overlay
    let overlay = MKTileOverlay(urlTemplate: template)

    // Indicates the tiles are opaque and replace the default map tiles
    overlay.canReplaceMapContent = true

    // Adds the overlay to the mapView
    mapView.add(overlay, level: .aboveLabels)

    // Creates a tile renderer which handles the drawing of the tiles.
    tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)

}

这给出了类似的错误:hread 1:此代码行的EXC_BREAKPOINT(代码= 1,子代码= 0x10561bb50)

    // Adds the overlay to the mapView
    mapView.add(overlay, level: .aboveLabels)

1 个答案:

答案 0 :(得分:0)

对于第一个,您必须使用UITableViewDelegateUITableViewDataSource,如下所示:

 class feedVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
 ....
 }

对于第二个,你必须在主线程上进行UI操作。

DispatchQueue.main.async {
    mapView.add(overlay, level: .aboveLabels)
}