在我的Xcode项目中,当用户点击通知时,我想先将其发送到tabBar中的某个项目,然后再实例化视图控制器并将对象发送到该视图控制器。我有将它们发送到所需的tabBar的代码,但我不知道如何在将tabBar和导航栏保持与视图控制器连接的同时将它们实例化到视图控制器。关于此问题的所有答案都需要您更改根视图控制器,这使我在调用视图控制器时失去了与tabBar和导航栏的连接。
一个真实的例子: 用户收到Instagram通知,说“ John开始关注您”->用户点击通知->
Instagram打开并显示通知选项卡->快速将用户发送到“ John”个人资料,并在用户按下后退按钮时,它将它们发送回通知标签
应该知道:我首先要进入某个选项卡的原因是要获取该选项卡的导航控制器,因为我要使用的视图控制器没有该控制器。
这是我将用户发送到“通知”选项卡的工作代码(我添加了注释,使其与Instagram示例类似,以便更好地理解):
if let tabbarController = self.window!.rootViewController as? UITabBarController {
tabbarController.selectedViewController = tabbarController.viewControllers?[3] //goes to notifications tab
if type == "follow" { //someone started following current user
//send to user's profile and send the user's id so the app can find all the information of the user
}
}
首先,您需要使TabBarController满足需要:
let storyboard = UIStoryboard.init(name: "YourStoryboardName", bundle: nil)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "YourTabBarController") as! UITabBarController
然后充分满足所有viewControllers
TabBarController的需求。如果您的viewControllers嵌入到UINavigationController
?如果是这样,您将改为使用导航控制器:
let first = storyboard.instantiateViewiController(withIdentifier: "YourFirstNavigationController") as! UINavigationController
let second = storyboard.instantiateViewiController(withIdentifier: "YourSecondNavigationController") as! UINavigationController
let third = storyboard.instantiateViewiController(withIdentifier: "YourThirdNavigationController") as! UINavigationController
另外,您也应该实例化所需的ViewController:
let desiredVC = storyboard.instantiateViewController(withIdentifier: "desiredVC") as! ExampleDesiredViewController
viewControllers
从TabBarController开始制作所有NavigationControllers :
tabBarController.viewControllers = [first, second, third]
并检查:这取决于您的选择。
if tabBarController.selectedViewController == first {
// Option 1: If you want to present
first.present(desiredVC, animated: true, completion: nil)
// Option 2: If you want to push
first.pushViewController(desiredVC, animated. true)
}
将tabBarController设置为rootViewController
:
self.window = UIWindow.init(frame: UIScreen.main.bounds)
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
最后:这是您完成的代码:
func openViewController() {
let storyboard = UIStoryboard.init(name: "YourStoryboardName", bundle: nil)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "YourTabBarController") as! UITabBarController
let first = storyboard.instantiateViewiController(withIdentifier: "YourFirstNavigationController") as! UINavigationController
let second = storyboard.instantiateViewiController(withIdentifier: "YourSecondNavigationController") as! UINavigationController
let third = storyboard.instantiateViewiController(withIdentifier: "YourThirdNavigationController") as! UINavigationController
let desiredVC = storyboard.instantiateViewController(withIdentifier: "desiredVC") as! ExampleDesiredViewController
tabBarController.viewControllers = [first, second, third]
if tabBarController.selectedViewController == first {
// Option 1: If you want to present
first.present(desiredVC, animated: true, completion: nil)
// Option 2: If you want to push
first.pushViewController(desiredVC, animated. true)
}
self.window = UIWindow.init(frame: UIScreen.main.bounds)
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
}
如果要在点击通知时显示或推送ViewController?尝试这样的事情:
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
switch response.actionIdentifier {
case UNNotificationDefaultActionIdentifier:
openViewController()
completionHandler()
default:
break;
}
}
}
我想在键盘打开时隐藏屏幕上的标签栏。我已经尝试过更改AndroidManifest.XML文件。通过将更改为,当键盘打开时,屏幕标签栏会隐藏,但问题是我现在的文本输入与键盘重叠,我也尝试过KeyBoardAvidingView,但它不起作用,因为当更改XML文件时,它也会影响其他应用程序组件。所以告诉我如何在键盘打开时隐藏标签栏而不更改XML文件。
下表为PC标签保留参数表,几乎所有的PC标签都支持这些保留参数设置 变量名 默认值 说明 action null 本参数的值表示为操作事件,模型类PC标签必须使用包含本参数,以说明要进行的操作。 cache 0 缓存存储时间(单位秒) num 20 获取记录的条数,最后会被模板引擎处理成limit传送到处理函数中。 page null 当前分页。一般填写为$_GET[page] urlrule n
问题内容: 是否可以使用功能在Firefox中(在后台)打开新标签页并保留当前标签页? 谢谢你的帮助 问题答案: 您无法使用javascript在后台打开标签页,因为这是在用户的使用偏好中设置的,您无法对其进行控制。设置为:
标签栏是一种特殊情况的工具栏,它包含图标(或者是带有文案的图标),而不是普通的文本,并且和标签页一起使用。 标签栏布局 标签栏和工具栏基本一致,但是它有额外的"tabbar"类: <div class="toolbar tabbar"> <div class="toolbar-inner"> <a href="#tab1" class="tab-link active">
问题内容: 答案演示:(答案为5月29日上午3:10) GitHub Actual Question before answered:(asked May 22 at 19:53) The title might be not too great but what I want to do is something like this in JavaFX: Question: 我不需要为此写代码。
问题内容: 我有以下使用Vaadin编写的代码。当用户单击按钮时,代码将打开页面。 我的问题是我有什么办法指定要在新标签页中打开页面吗? 谢谢。 问题答案: 该窗口的名字是很重要的位置。要注意的是,你还可以有一个浏览器 将 可以在新窗口中打开资源来代替。 该方法还有另一个签名,即 可能符合要求。HTH。 参考:Page(Vaadin 7.2.1 API) 。