检测何时按下标签栏项目

2023-12-12

我有一个根视图控制器,它没有设置为故事板上任何视图控制器的自定义类。相反,我的所有视图控制器都像这样子类化此类。

// RootViewController
class RootViewController: UIViewController, UITabBarDelegate { 

    // This is not getting executed on any of the view controllers
    func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
        print("ddd")
    }
}

// Subclassing it 
class TopStoriesViewController: RootViewController {

}

但是,当在子类化 rootviewcontroller 的视图控制器上按下 tabbaritem 时,我似乎很难做某事,即消息没有被打印。


您不希望视图控制器的基类是 UITabBarDelegate。如果您要这样做,所有视图控制器子类都将是选项卡栏委托。我认为你想要做的是扩展 UITabBarController,如下所示:

class MyTabBarController: UITabBarController, UITabBarControllerDelegate {

然后,在该类中,重写 viewDidLoad 并将委托属性设置为 self:

self.delegate = self

注意:这是设置标签栏控制器委托。选项卡栏有自己的委托 (UITabBarDelegate),由选项卡栏控制器管理,并且不允许更改。

因此,现在这个类既是 UITabBarDelegate (因为 UITabBarController 实现了该协议),又是 UITabBarControllerDelegate,并且您可以根据需要重写/实现这些委托的方法,例如:

// UITabBarDelegate
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    print("Selected item")
}

// UITabBarControllerDelegate
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
    print("Selected view controller")
}

我猜你可能对后者更感兴趣。查看文档以了解每个代表提供的内容。

最后一件事,在故事板中(假设您正在使用故事板),将标签栏控制器的类设置为 Identity Inspector 中的 MyTabBarController,然后就可以开始了。

斯威夫特 3/4

// UITabBarDelegate
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print("Selected item")
}

// UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    print("Selected view controller")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测何时按下标签栏项目 的相关文章

  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • 保存来自 TrueDepth 相机的深度图像

    我正在尝试保存 iPhone X TrueDepth 相机的深度图像 使用AVCam照片滤镜 https developer apple com library content samplecode AVCamPhotoFilter Lis
  • iOS Swift 在后台下载大量小文件

    在我的应用程序中 我需要下载具有以下要求的文件 下载大量 例如 3000 个 小 PNG 文件 例如 5KB 逐个 如果应用程序在后台继续下载 如果图像下载失败 通常是因为互联网连接丢失 请等待 X 秒然后重试 如果失败Y次 则认为下载失败
  • 二元运算符“/”不能应用于两个(Int)操作数[重复]

    这个问题在这里已经有答案了 我得到了Binary operator cannot be applied to two Int operands当我将以下代码放入 Xcode 中的 Swift Playground 时出错 func sumO
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 在 React Native 中将 Swift 事件发送到 Javascript 的正确流程

    我一直在尝试使用 Swift 构建全面的蓝牙功能 我目前陷入了如何将事件从 Swift 发送回 React Native 的困境 我尝试过this https stackoverflow com questions 31870775 rea
  • 如何在 Swift 中使用未知密钥解码 JSON 响应?

    我想将数据拆分为https blockchain info ticker https blockchain info ticker这样每一行都是它自己的String在一个数组中 我正在制作一个获取所选货币价格的应用程序 因此 如果有人想要澳
  • Xcode 错误 - 架构 x86_64 的未定义符号?

    我正在运行 Swift 4 和 Xcode 9 beta 我收到此错误 但我不知道如何解决它 我什至不知道这是什么意思 Undefined symbols for architecture x86 64 T0So22AVCapturePho
  • 我们能否检测用户是否通过主页按钮或锁定按钮离开而没有监听 darwin 通知?

    我最近向应用程序商店提交了一个新的二进制文件并将其发送以供审核 但它立即被拒绝并显示以下消息 不支持的操作 不允许应用程序监听设备锁定通知 经过一番挖掘后 我发现我们无法使用 com apple springboard lockstate
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • Swift:如何减少 didupdatelocations 调用

    我想出了一些代码来打印我所在位置的地址和邮政编码 这是在 didupdatelocation 函数中完成的 我遇到的唯一问题是 didupdatelocation 函数每秒都会更新该地址 因为这电池效率非常低 所以我一直在寻找使用间隔的方法
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 所需框架与静态库

    构建现代框架 https developer apple com videos play wwdc2014 416 says 每个应用程序都有自己的自定义框架副本 https stackoverflow com a 15262463 242
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController

随机推荐

  • 如何迭代求BST的高度?

    public void HeightIterative int counter 0 int counter2 0 TreeNode current root if current null while current LeftNode nu
  • 将 PHP 页面的 html 响应返回到变量

    我正在尝试生成一封电子邮件 其中包含一些通过另一个 PHP 文件创建的 HTML 电子邮件生成文件由每小时运行的 cron 运行 存在另一个文件 可生成电子邮件所需的 HTML HTML 生成文件没有我可以调用的函数 例如 emailBod
  • Pandas groupby max - 多列

    在 pandas 中分组到最大值后 如何完全沿着 max 值显示匹配的行结果 df data loc no std date result date result result df groupby no std date result d
  • 如何滚动警报控制器中的操作? Xcode 8、Swift 3、IOS

    请帮忙 我是个大菜鸟 我从各种来源收集了这段代码 所以我真的不知道我在做什么 我的警报控制器显示我可以写入的文本字段 取消 操作 确定 操作 它还显示多个 输入要标记的关键字 操作 它有太多的操作 我需要的大约 20 个关键字操作 以至于它
  • 了解 VBScript 中的 ON ERROR

    我正在尝试修改 vbscript 并将其按照指示转换为 Powershell 我的函数 SearchAD 有一段出现错误的代码 on error resume next Set objRS command execute SearchAD
  • 无法生成 DialogFlow v2 访问令牌

    在版本 1 中 这就是我与 DialogFlow Api 通信的方式 fetch configs baseUrl query v 20150910 body JSON stringify query text lang en session
  • 请解释一下这个 requestAnimationFrame 习语

    有很多地方 例如如何使用requestAnimationFrame 修复window requestAnimationFrame如下 我不明白为什么赋值的右侧被包装到函数调用中 window requestAnimFrame functio
  • 查找 Git 分支创建者

    我想知道是谁创建了一个分支 我可以通过以下方式做到这一点 git branch a xargs L 1 bash c echo 1 git log pretty format H an 1 1 但是 这会返回每个分支的最后一个提交者 而不一
  • 暂时停止表单事件的引发或处理?

    我的表单上有大量控件 并且在特定时间我想暂时停止处理所有事件 通常 如果我不想处理某些事件 我就会这样做 private bool myOpRunning false private void OpFunction myOpRunning
  • 如何缩放 SVG 图像以填充浏览器窗口?

    这看起来应该很容易 但我只是没有得到什么 我想要制作一个包含单个 SVG 图像的 HTML 页面 该图像会自动缩放以适合浏览器窗口 无需任何滚动 同时保留其纵横比 例如 目前我有一个 1024x768 SVG 图像 如果浏览器视口为 198
  • Google 在添加 Schema.org 标记时需要某些类型的某些属性吗?

    我尝试在我的网站上添加 Schema org 标记 类型为Article 然后在其上添加一些属性 当在Google结构化数据测试工具上检查时 它说需要某些属性 例如dataPublished author etc 我可以添加一些属性来满足要
  • 如何从 AngularJS 范围内的数组中删除项目?

    简单的待办事项列表 但列表页面上的每个项目都有一个删除按钮 相关模板 HTML tr td person name person id td td person description td td a href edit i class i
  • ASP.NET 5 Identity 3 用户在一段时间后注销

    我使用 RC1 位和外部 Google 身份验证 没有 Identity EntityFramework 在登录过程中 我设置了 记住我 标志 登录用户在浏览器重新启动 我看到 cookie 设置为 14 天后过期 和网站重新启动后仍然存在
  • 如何解决上下文中重新渲染过多的问题?

    每当我更新的时候user object in users array 在上下文中 所有使用的组件users重新渲染 我尝试过的 我有一个使用上下文中的值的组件 const DashboardCardList gt const context
  • MySQL - 从 PHP 插入日语 - 编码问题

    我正在尝试在 mysql 表中插入一些日语单词 如果我使用 phpMyAdmin 插入 则 phpMyAdmin 可以正常显示该单词 但如果我尝试通过 php 插入它 如下所示 mysql connect Host User Passwor
  • 使用xpath和java解析xml

    现在我想解析来自 webservice 的 xml 为了解析 我使用了xpath和java 我有以下代码 package test client import com sun org apache xpath internal NodeSe
  • 如何使用“api”或“implementation”指令从 gradle 插件获取依赖项

    背景 运行 Android Studio 3 0 beta7 并尝试获取一个适用于 Android 库的 javadoc 任务 事实上 这首先不能作为现成的任务提供 这真的很奇怪 我设法调整了一个根据我的需要回答不同的问题 最后得到这个代码
  • Pygame-创建更多 USEREVENT 类型事件的方法?

    这个问题是由于需要创建大量 USEREVENT 类型事件而产生的 由于我找不到有关如何创建超出限制的用户事件的信息 因此我来这里寻求帮助 目前我知道USEREVENT类型事件的值为24 最大允许的id为31 我还发现一些id s被保留 至少
  • 如何更改 Android Things 设备上的日期?

    我正在 Raspberry Pi 3 Model B 上使用 Android Things Developer Preview 有什么方法可以设置正确的日期 时间 时区 最简单的方法可能是使用date通过 ADB 执行 shell 命令 它
  • 检测何时按下标签栏项目

    我有一个根视图控制器 它没有设置为故事板上任何视图控制器的自定义类 相反 我的所有视图控制器都像这样子类化此类 RootViewController class RootViewController UIViewController UIT