object-c在视图之间传递字符串

如何解决object-c在视图之间传递字符串

| 我正在尝试找出在视图之间传递字符串的最佳方法。 例如,假设用户可以选择他们想要的口味冰棍。在打开视图中,他们按下一个按钮以打开一个表视图控制器,该控制器显示5种口味的表。假设用户选择\“ Grape \”,则视图控制器立即关闭并返回到打开的视图。如何将\“ Grape \”的字符串数据获取到打开视图控制器? 我已经阅读了一些有关NSUserDefaults的内容,并对其进行了一些尝试,但是对我来说似乎有点不可思议,而且我不确定这是否是最好的选择。有什么建议吗?     

解决方法

        有几种方法可以执行此操作,您可以发布一个通知,其中包含一个对象,该对象包含您的打开视图所预订的选定信息。您将在您的案例中选择该选项时发布此通知。 另一个选择是使用委托模式,您的打开视图可以是您的辅助视图的委托,当选择该选项时,将调用委托方法将信息传递回去。 您想要远离的是为辅助视图提供对打开视图的引用,这将使您的视图层次结构变得僵化,并且在没有相同打开视图的情况下,您无法在其他任何地方重复使用辅助视图。 为了进一步研究委托示例,这是我要走的路线。 定义你的ColorPickerViewController
@interface ColorPickerViewController

@property (nonatomic,assign) id delegate;
// other supporting properties

@end

@protocol ColorPickerViewControllerDelegate <NSObject>

@optional 
 - (void) colorWasPicked:(UIColor *)pickedColor;

@end

@implementation ColorPickerViewController

@synthesize delegate;

- (void)colorSelected { // some method that is called when the user selects a color
    if([self.delegate respondsToSelect(@selector(colorWasPicked:)]) {
        [self.delegate colorWasPicked:selectedColor];
    }
}

@end
然后,您的打开视图控制器将实例化ColorPickerViewController并将其自身分配为委托
@interface OpeningViewController : UIViewController <ColorPickerViewControllerDelegate> {


}


@implementation OpeningViewController 

// implement the delegate method you wrote

- (void) colorWasPicked:(UIColor *)pickedColor {

    self.userSelectedColor = pickedColor;

}
显然,这不是剪切和粘贴代码,但它应该引导您朝着正确的方向前进,可能会出现一些错误,但我认为在大多数情况下应该很清楚。     ,        我至少可以想到三种合理的方法: 父视图控制器从子视图控制器检索所需的数据。 给子视图控制器一个委托,通常是父委托,并调用某种委托方法来传递它收集的所有信息。 孩子会发布一条通知,告知所有愿意聆听其数据已更改的人。 大多数时候,我更喜欢选择#1。父视图控制器已经对子视图控制器有所了解,因为毕竟,实例化该子视图的是父级。父母保留对孩子的引用也很简单,当父母的视图可见时,它可以轻松获取所需的数据。 如果您不希望父母跟踪孩子,那么选择#2是个好方法-它可以实例化孩子,以模态形式显示孩子或将其推入导航堆栈,然后将其遗忘。如果您希望孩子数据的接收者有更多的灵活性,这也很好。例如,您可以将数据模型设为子级的委托而不是父级视图控制器,并且可以将所选的样式(或其他内容)直接传递给模型。 当可能有多个对象对子数据的更改感兴趣时,或者当您不确定哪个对象可能感兴趣时,选项3会亮起。 默认系统很好用,特别是对于小数据,但IMO最好将其视为存储机制,而不是通信渠道。     ,        在您的示例中,您可以使用UIPickerView向用户显示选项并获取所选值。看看UIPickerView的文档。     ,        我认为,真正的解决方法是根据模型,视图,控制器来概念化问题,这就是应如何解决所有基于Cocoa的问题的方法,正如Apple文档经常重申的那样。 您的两个视图是Views,它们只应与用户交互(显示信息,接受输入)。 应该有一个控制器(复数?),该控制器知道有2个视图,并允许这些视图与数据进行交互。 该模型实际上有一个名为
NSString *flavor;
的变量。它拥有该信息。通过与Controller的接口,任何视图都具有相同的变量样式以进行显示或修改。 回顾一下:您可以通过将数据放置在1个位置(模型)来解决问题。存在一个控制器,用于将该数据连接到您的多个视图,这些视图不知道实际数据的保存位置。     ,        为此,您可以使用
NSNotifications
。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res