如何从一个视图访问另一个视图的数据?

2024-03-15

我有一个UITabBarController有两个选项卡:

  1. UINavigationController
  2. OptionsViewController : UIViewController

我如何获取数据(即UILabel.text) 设于OptionsViewController,在一个新添加的模态视图中,该视图已被调用UINavigationController?

Edit1:

场景:启动应用程序后,我选择第二个名为“选项”的选项卡栏,在其中填写文本字段。标签设置的值来自文本域。接下来,我选择第一个名为“Main”的选项卡栏,其中有一个按钮。我单击按钮,就会出现新的模式视图。在这个新的模式视图中,我想显示来自的值文本域


我喜欢 MVC,但我并不是一个绝对的纯粹主义者,以至于为了完成一项相当琐碎的任务而伤害自己,所以您在这里得到的答案是好的和有用的。但是,通过创建 ivar 来引用特定类型(例如标签或其他视图控制器),您可以将不需要耦合的事物耦合在一起。您可以做的就是使您的第一个选项卡视图控制器成为第二个选项卡视图控制器的委托。因此,在您的应用程序委托中执行类似的操作。

OptionsViewController *optionsViewController = // ... get this from the tab view
FirsTabViewController *firstTabViewController = // ... same here

[optionsViewController setDelegate:firsTabViewController];

这意味着您的 OptionsViewController 中需要一个 ivar:

@property (assign) id delegate;

然后,当您想要触发更改的任何事件发生在选项视图控制器中时,请查看委托是否可以响应您指定的选择器。例如:

- (void)someEventHappenedLikeTyping:(id)sender;
{
    if ([delegate respondsToSelector:@selector(setOptionsString:)]
        [delegate performSelector:@selector(setOptionsString:) withObject:[label text]];
}

请注意,您从未指定任何特定的对象类型。您只需检查委托(声明为 id)是否可以响应该选择器。如果可以的话,它就会按照它的指示去做,否则就保持沉默。

为此,您需要为 FirstTabViewController 中的 optionsString 提供一个 ivar,因此它将在标头中声明为:

@property (copy) NSString *optionsString;

然后在.m中@synthesize它。这会导致 -setOptionsString 成为将在 -someEventHappenedLikeTyping 方法中调用的有效选择器。

无论如何,现在,如果您需要更改哪个视图控制器引用哪个视图控制器,则不必进入标头并更改引用的 ivar 类型。您只需在作为选项视图控制器的委托的视图控制器中实现选择器(顺便说一下,这称为非正式协议)。

只是一些值得深思的东西。希望有帮助。我可以在我添加的代码中完成进一步的解耦,但对于这样一个简单的任务来说,这可能有点过分了。如果您需要澄清或想了解我所说的进一步解耦的含义,请告诉我。

此致,

p.s. 有时需要在两个选项卡栏视图控制器之间共享数据,意味着您存在设计缺陷。如果您想从选项视图中存储首选项,您应该调用

[[NSUserDefaults standardUserDefaults] setObject:[label text] forKey:@"option1"];
[[NSUserDefaults standardUserDefaults] synchronize];

然后,您可以使用以下命令从 NSUserDefaults 中拉回主选项卡:

NSString *option1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"option1"];
// Do something with option1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从一个视图访问另一个视图的数据? 的相关文章

  • 强制向扬声器发出音频警报

    我有一个小应用程序 在此应用程序中 扬声器每隔我设置的特定时间就会发出噪音 现在 我希望即使设备中插入了耳机插孔 它也能通过内置扬声器发出噪音 我怎样才能做到这一点 您可以尝试以下代码在扬声器上播放代码 另请检查this http uiha
  • 原生插入符位置 macos cocoa

    我希望能够使用 cocoa 或 appleScript 获取 Mac High Sierra 中任何应用程序内的全局插入符位置 我已经使用 NSEvent 来获取键盘和鼠标挂钩 但是有没有办法获取插入符位置挂钩 插入符号与鼠标位置不同 它会
  • NSString 上的 stringWithFormat 与 initWithFormat

    我想知道以这种方式声明 NSString 有什么区别 例如缺点和 或优点 NSString noInit NSString stringWithFormat lolcatz d i 与以下相反 NSString withInit NSStr
  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • 获得 IAP 产品响应后出现 Objective-C 错误

    此代码来自 Phonegap 代码 IAP 插件 错误发生在 发送的js 之后的代码行上 除了最后一个 nil 之外 发送到该函数的所有元素均非零 我什至将它们注销以确保它们已发送 该代码直接来自插件 https github com us
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 如何使用自动布局在自定义 UITableViewCell 内动态设置 UITextView 高度

    I have UITableView every tableViewCell is custom Inside my customTableViewCell is a UITextView TextViews frame is pin or
  • 永远不会在 ios 的 google API 中获取上传数据进度

    我在我的应用程序中使用 Google Drive API 从我的应用程序上传文件 到目前为止 我成功了 并找到了上传所有类型文件的良好结果 我跟着谷歌示例 https developers google com drive examples
  • UIView 和 UITableView 中的 UITapGestureRecognizer 冲突

    我有一个UIView我在其中添加了一个UITapGestureRecognizer 在该视图中 我还有一个子视图 其中基本上是某种UITableView 问题是为什么不UITableView识别连续点击 而是始终转到点击手势识别器的处理程序
  • 如何在 Xcode 4.2 中创建 Shell 脚本目标?

    我想知道是否有人知道 XCode 4 1 如何创建 shell 脚本 该选项不存在 但在最新版本中可能会被称为其他名称 塔 在导航器中选择您的项目 单击 添加目标 为空目标选择 聚合 添加构建阶段 gt 添加运行脚本 单击构建阶段并编辑运行
  • 小视频播放

    根据我从互联网收集的信息 MPMoviePlayerController 类不支持小视频播放 因此 为了死马当活马医 我想知道可以使用什么样的方法来让小视频在屏幕的一角播放 而不中断屏幕的其余部分 到目前为止 我们已经遇到了两种可行的解决方
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • 将 Xcode 4.5 新 XIB 文件恢复到 iOS<6

    我已经安装了Xcode 4 5 with iOS6 SDK以及其他用于测试目的的旧 SDK 从 4 3 到 6 0 很美 但是有一个BIG问题 生成一个新的 XIB 文件以兼容 iOS6 这是一个问题 因为我的应用程序需要运行在旧设备 不只
  • 如何将 NSDate 转换为 NSString?

    我想将 NSDate 转换为 NSString 这怎么可能 我尝试了这个 但它不起作用 它正在生成异常 NSString dateToString NSString alloc initWithFormat NSString dateObj
  • 返回一个dispatch_async获取的变量[重复]

    这个问题在这里已经有答案了 基本上 一个方法需要返回一个在dispatch async中获取的NSDictionary 这是我尝试过的 NSDictionary fetchNSDictionary dispatch queue t Queu
  • 基于 JavaScript 的 iPhone UI 框架

    我们有一个基于推送的网络应用程序 最近 我们计划为其制作一个 iPhone 应用程序 就像 Facebook 拥有 iPhone 应用程序和网站一样 我们正在寻找一个可以让我们快速前进的 UI 框架 我翻阅过PhoneGap http ww
  • iPhone OS 3.0.1 会毁掉你的开发手机吗?

    我将手机更新到3 0 1 虽然手机作为手机工作正常 xcode http en wikipedia org wiki Xcode组织者不再知道手机的名称 它还说这个版本的 xcode 不支持 3 0 1 我下载了最新版本的xcode和操作系
  • Excel 工作表到 iPhone 数据 -- A 点到 B 点

    尽可能简单 我有一个非常简单的 Excel 电子表格 只有 1000 多条记录 我想将其用作 iPhone 应用程序的静态数据源 最好的进攻计划是什么 我心中的可能性 1 直接读取XLS作为数据源 是否有Obj C库用于此 2 将XLS 转
  • [[NSMutableDictionary alloc] initWithObjects:...] 和 [NSMutableDictionary DictionaryWithObjects:...] 之间的区别?

    仍在学习 Objective C iPhone SDK 我想我知道为什么这不起作用 但我只是想确认一下 In awakeFromNib 如果我使用 NSMutableDictionary alloc initWithObjects 它实际上
  • 将滚动事件从 uibutton 传递到 uiscrollview

    我有水平的UIScrollView这是从UIScrollView我添加了UIButtons水平地 我只能滚动到按钮区域之外 但如果我想滚动到任何按钮就会触发UIControlEventTouchUpInside事件 我不想要这个 我想开火U

随机推荐

  • 在解组操作期间将 nil="true" 转换为 null

    我从服务器接收 XML 该服务器的架构将几乎每个元素指定为
  • Java:jsr166y Phaser 的教程/说明

    这个问题 https stackoverflow com questions 1148125 resources on the upcoming fork join framework两年前被问到 但它提到的资源要么不是很有帮助 恕我直言
  • kivy 应用程序内的一个简单网页作为小部件

    我想在 ubuntu 64 位上运行的 kivy 应用程序中有一个 Web 视图 我查看了网络 浏览了 kivy 的文档并在 StackOverflow 上搜索答案 但我找不到任何可以完成我的工作的东西 一个简单的网页需要在 kivy 应用
  • 可以检测元素的样式是否只是浏览器默认样式还是由样式表或内联样式设置吗?

    我的 javascript 包含在 X 的网站中 但我对她的网站或她包含它的位置没有任何其他控制权 如果她的造型 element 我想不管它 但如果她没有 我有一个样式表 我会注入 有什么办法可以检测她是否有造型吗 检查它的高度是 0 还是
  • 如何用Go实现BitSet?

    我在Go中没有找到BitSet包 所以我尝试实现它 我想使用 uint64 数组来存储这些位 我需要分配 uint64 数组的位数 使用 Java 我可以定义一个采用整数的构造函数 虽然 Go 不提供构造函数 但我如何正确初始化 当用户调用
  • 交换 css 字体时是否会发出 js 事件?

    我可以判断字体何时已成功 或以其他方式 加载 然后使用 JS 进行操作吗 Context 我正在使用 playwright 打印一系列文档 我目前正在加载这些字体https fonts googleapis com css2 family
  • 理解 Java 中抽象类的用途

    假设我有两个类 A和B A类被定义为抽象类 而B类扩展了这个抽象类 最后我测试结果 这两个类都是同一个包的一部分 public abstract class A protected abstract void method1 protect
  • 游标与 While 循环 - SQL Server

    假设我在数据库 本例中为 SQL Server 2008 中有一堆可用于创建方程的行 OperationID EquationID Operation Amount Order 1 1 12 1 2 1 12 2 3 2 2
  • Kubernetes 将 env 变量传递给“kubectl create”

    我需要将动态环境变量传递给kubectl create 像这样的东西 kubectl create f app yaml Target prod 基于Target的代码部署在不同的服务器上 如果您想避免安装第 3 方插件 则可以使用 sed
  • 如何使用 Language-Ext 将 Task> 绑定到 Either<>

    我有可以请求数据库中保存的卡列表的设备 例如移动电话 支付终端等 为了安全起见 设备需要对自己进行授权 并在 JWT 令牌中提供其序列号 如果其中任何一项不匹配 我们将拒绝该请求 感谢最近对相关问题的大量帮助 我现在有两种在类似场景中使用的
  • 从 Facebook 页面提取公共帖子,无需 API/APP 密钥/令牌/秘密

    提前澄清一下 我没有 Facebook 帐户 也无意创建一个帐户 另外 我想要实现的目标在我的国家和美国是完全合法的 我不想使用 Facebook API 来获取 Facebook 页面的最新时间线帖子 而是直接向页面 URL 发送获取请求
  • 当我在 ASP.NET 中组合 Bearer Token 和 Cookie 身份验证时,出现 401

    我需要结合令牌和 cookie 来授权 wepapi 项目中的请求 我添加了 Cookie 和 Jwt 来验证请求 在更改 DefaultPolicy 之前 我可以获得我的声明 信息 但更改后我得到 401 这是我的 Program cs
  • 在 R 中,变量与基本 R 函数同名到底有什么问题?

    使用在基本 R 中具有相同名称的函数的变量名称似乎通常被认为是不好的编程习惯 例如 很容易写成 data lt data frame df lt data frame 现在 函数data函数加载数据集df计算 f 密度函数 同样 也很容易写
  • Jupyter Notebook 将默认文件夹设置为根目录

    我在 Windows 7 上使用 Jupyter Notebook 我想将默认文件夹设置为D 目前 我的 jupyter notebook config py 中有以下行 c NotebookApp notebook dir D 当我打开
  • 如何在Python中读取QLineEdit中的文本?

    我为我的插件创建了一个带有 3 个按钮的启动 GUI 这非常有效 如果我单击其中一个按钮 就会启动特定操作 到目前为止这有效 如果我单击其中一个按钮 则会出现一个带有两个按钮 确定 和 取消 的新 GUI 以及一个行编辑 如果我按下 取消
  • 如何在Geofence android中添加后台服务

    我正在尝试创建一个带有监控后台服务的地理围栏 地理围栏创建成功并在应用程序活动打开时工作 但在关闭应用程序地理围栏时不起作用 我现在应该怎么做 我的代码是 public class MapsActivity extends Fragment
  • 在 Eclipse 中使用 Maven Android 原型

    我正在尝试使用以下原型 https github com akquinet android archetypes wiki Android release archetype https github com akquinet androi
  • 如何在FragmentStatePagerAdapter中动态添加页面

    我知道这个问题被问了很多次 但经过多次研究后我没有得到答案 在我的主要活动中 我有一个视图寻呼机 并为此设置了一个适配器 public void onCreate Bundle savedInstanceState super onCrea
  • R 中按日期范围设置的 data.table 子集

    我在 data table 中有一个大型数据集 我想按日期范围对其进行子集化 我的数据集如下所示 testset lt data table date as Date c 2013 07 02 2013 08 03 2013 09 04 2
  • 如何从一个视图访问另一个视图的数据?

    我有一个UITabBarController有两个选项卡 UINavigationController OptionsViewController UIViewController 我如何获取数据 即UILabel text 设于Optio