панель навигации исчезает при открытии контроллера вида по глубокой ссылке - PullRequest
0 голосов
/ 01 мая 2018

Я использовал учебник для реализации метода в делегате приложения для открытия определенных контроллеров представления с кнопки HTML из safari. мой делегат приложения выглядит так:

func application(_ app: UIApplication, open URL: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    print("url \(url)")
    print("url host :\(url.host!)")
    print("url path :\(url.path)")


    let urlPath : String = (url.path as String?)!
    let urlHost : String = (url.host as String?)!
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    if(urlHost != "mywebsite.ir")
    {
        print("Host is not correct")
        return false
    }

    if(urlPath == "/index"){


        let innerPage: ViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
        self.window?.rootViewController = innerPage
    }
    self.window?.makeKeyAndVisible()
    return true
}

и моя ссылка на кнопку HTML:

<a href= "myapp://mywebsite.ir/index">open app</a>

но когда открывается домашняя страница моего приложения, панель навигации исчезает, и пользователь застревает и не имеет никакого доступа к кнопкам меню или кнопке возврата (в случае внутренних контроллеров представления).

скриншоты контроллера вида до и после глубокой ссылки:

when navigation disappears

how it should be

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Является ли HomeViewController начальным ViewController? Если нет, вы можете вызвать начальный контроллер представления, который должен быть контроллером представления с контроллером навигации.

Попробуйте сделать это: mainStoryboard.instantiateInitialViewController()

Если поведение сохраняется, вы можете встроить NavigationController в код

let viewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
let navigationController = UINavigationController(rootViewController: viewController)
self.window?.rootViewController = navigationController

Также вам не нужно вызывать window.makeKeyAndVisible ()

0 голосов
/ 01 мая 2018

Пожалуйста, обновите ваш код, как показано ниже. Вы должны установить контроллер навигации в качестве контроллера корневого представления окна.

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
print("url \(url)")
print("url host :\(url.host!)")
print("url path :\(url.path)")


let urlPath : String = (url.path as String?)!
let urlHost : String = (url.host as String?)!
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

if(urlHost != "mywebsite.ir")
{
    print("Host is not correct")
    return false
}

if(urlPath == "/index"){


    let innerPage: ViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
let nav = UINavigationController.init(rootViewController: innerPage)
    self.window?.rootViewController = nav
}
self.window?.makeKeyAndVisible()
return true
...