怎么把一个NSString传入Button的js怎么触发点击事件件方法里面

iOS UIButton传递多个参数的方法——使用关联函数
iOS UIButton传递多个参数的方法——使用关联函数
在平时开发时经常会要遇到通过button的绑定值来做逻辑处理以区分不同的button,通常使用tag来区分,但是当需要传多个值的时候这就比较麻烦了,通常考虑用全局变量来传值,今天来介绍另一种给UIButton传值的方法——关联函数。下面来简单介绍下关联。
关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。
在类的定义之外为类增加额外的存储空间
使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。
关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。
创建关联要使用到Objective-C的运行时函数:objc_setAssociatedObject来把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略。当然,此处的关键字和关联策略是需要进一步讨论的。
关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。
下面的代码展示了如何把一个字符串关联到一个数组上。
注意使用时导入头文件&objc/runtime.h&
objc_setAssociatedObject需要四个参数:源对象,关键字,关联的对象和一个关联策略。
1、源对象alert
2、关键字 唯一静态变量key associatedkey
3、关联的对象 sender
4、关键策略
OBJC_ASSOCIATION_RETAIN_NONATOMIC
static char overviewK
NSArray * array =[[NSArray alloc] initWidthObjects:@"One", @"Two", @"Three", nil nil];
NSString * overview = @"First three numbers";
objc_setAssociatedObject(array, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
获取关联对象
获取相关联的对象时使用Objective-C函数objc_getAssociatedObject。接着上面的代码,我们可以使用如下代码来获取与array相关联的字符串:
NSString * associatedObject = (NSString *)objc_getAssociatedObject(array, &oveviewKey);
断开关联是使用objc_setAssociatedObject函数,传入nil值即可。接着上面的程序,我们可以使用如下的代码来断开字符串overview和arry之间的关联
objc_setAssociatedObject(array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN);
其中,被关联的对象为nil,此时关联策略也就无关紧要了。使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。
实现UIButton传值
通过btn传递两个实例对象
firstObject和secondObject
创建button并关联对象及button的点击事件
UIButton *btn = // create the button
objc_setAssociatedObject(btn, "firstObject", someObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
objc_setAssociatedObject(btn, "secondObject", otherObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
- (void)click:(UIButton *)sender
id first = objc_getAssociatedObject(btn, "firstObject");
id second = objc_setAssociatedObject(btn, "secondObject");
向以上方法那样,只要设置了关联,当把button传递给@selector的参数时,也顺便把另外两个参数也传递过去了。就类似设了button的两个属性,但是这种方法简单多了。
第一步: 设定关联objc_setAssociatedObject(btn, "firstObject", someObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);第一个参数:btn为被关联者(主体),第二个参数:firstObject为指向关联的对象的指针(一般为一个static字符串),第三个参数:关联的对象实例,第四个对象:关联的方式(有几种,类似设定.h文件属性时候的 assign,retain等)
第二步:得到关联的对象
id first = objc_getAssociatedObject(btn, "firstObject");第一个参数:为被关联者第二个参数:为关联对象的指针。
在平时开发时经常会要遇到通过button的绑定值来做逻辑处理以区分不同的button,通常使用tag来区分,但是当需要传多个值的时候这就比较麻烦了,通常考虑用全局变量来传值,今天来介绍另一种给UIButton传值的方法——关联函数。下面来简单介绍下关联。 创建关联要使用到O...
近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受。经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了。总结下面试人过程中的感受,你也可以读到我们对简历、算法、性格、iOS 基础、底层知识的看法和一些常问的面试...
1.什么情况使用 weak 关键字,相比 assign 有什么不同? 什么情况使用 weak 关键字? 在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性 自身已经对它进行一次强引用,没有必要再强引用一...
索引风格纠错题优化部分硬伤部分 什么情况使用 weak 关键字,相比 assign 有什么不同?怎么用 copy 关键字?这个写法会出什么问题: @property (copy) NSMutableArray *如何让自己的类用 copy 修饰符?如何重写带 c...
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠谱的 iOS》,其中共55题,除第一题为纠错题外,其他54道均为简答题。 出题者简介: 孙源(sunnyxx),目前就职于百度,负责百度知道 iOS 客户端的开发工作,对技术喜欢刨根问底和总结最佳实践,热...
摸到一手臭牌很多时候都是打不赢的,能打赢靠的是胆量和智慧。 懂得很多道理却依然过不好这一生 是因为这个世上有很多道理,适合自己的才是鸡汤 不适合自己的都是毒药。
深圳网络营销培训班 阳光智业(深圳)教育科技有限公司是一家以面向大学生提供职业技能培训、就业服务的教育培训机构,目前推出的课程有《互联网营销培训》、《UI设计》、《工业机器人》、《无人机操作考证》,致力于提高大学生职业能力和就业竞争力,与湖南、湖北、江西、河南、陕西等省市有...
不知道从什么时候开始,高考好像成了我的一个梦魇,无法忘记,也无法释怀。大二暑假的一个夜晚,梦里的我还在纠结是继续念完大学,还是退学回高中再参加一次高考。 世界上最可悲的,大概就是像我这种能力不及野心、努力又不够的可怜人。 今天上午从学校出发,去另一个学校参加一场考试,考点所...
1 在网络刚刚流行的初期,大多数人最喜欢做的事情就是聊QQ、进聊天室,且在聊天室里待了不一会的功夫,就能跟很多人在网上谈笑风声,可是一回到现实生活中,却寥寥无几能说几句话。 为什么会这样? 当不用面对面与一个人聊天时,大脑思维活跃,整个人情绪放松,任何想说的从大脑里一闪而过...
人成长的动力就是看到比自己优秀很多的人依然很努力的学习着,在拆书帮,我见到了那么多优秀、努力、自信的人,我就更没有理由不好好提升自己了。 到拆书帮也有段时间了,参加的线下活动仅有两三次,但是,每次参加都会看到不同晋级的主题,学习到自己以前碰到的,但没解决的问题,比如如何将大...已经把这个错误信息Email给管理员了,我们会尽早解决这个问题
如果你持续遇到这个错误,请到bug相关文章推荐
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationTy...
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationTy...
OC获取jS中的点击事件方法
获取JS上下文环境
_jsContext = [_ljWebView
valueForKeyPath:@"documentView.webVie...
最近项目中用到了webvVew,webView加载的网页中有两个按钮,要在app里面响应这两个按钮的点击事件,并接受JS传过来的参数。
ios7 的时候,出来了一个新的类库叫JavaScript...
在上一篇文章中我介绍了如何在webView上添加头部与尾部原生控件,今天为大家简要说明一下如何点击webView上的控件之后调用native代码:
HTML和iOS的交互一、 点击HTML中的按钮,iOS获取到HTML的传值,并进行原生态的操作
导入系统库JavaScriptCore
在webViewDelegate方法中
ios开发 webView交互-监听地址变化情况:在一个控制器中,加载了一个webView,webView加载了一个网页地址(url)为b,需求是当点击这个webView的时候地址b会变成c,在这期间...
事情缘由,充值界面是第三方,所以点击充值确认按钮的时候,请求成功,但是没有跳转到下个界面(充值成功界面),原因或许是网络慢,过一会才跳转到下个界面,中间的这段时间,(充值确定按钮)还可以再次点击,所以...
UIWebView的一些用法总结
2人收藏此文章, 我要收藏发表于3个月前(
16:29) , 已有615次阅读 ,共0个评论
目录:[ - ]
UIWebView的Delegate方法中有
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequ...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)**在布局文件中设置Button的点击事件,代码中方法要传入View的原因分析**
本人大四实习生小菜鸟一枚,近期工作中想到了个在大学期间遇到的不解问题。就是以前老师介绍添加四种点击事件是在布局文件中引用方法,然后在代码中构造一个同名的方法即可。需要注意的是方法参数必须传入View,当时一直奇怪为什么要加入一个那样的东西。
近期工作遇到又遇到这个问题花了点时间研究了下原因,特此来分享下,不足或者错误之处请前辈多多指教。
由于这篇文章是我在CSDN上的第一篇文章,可能写的有点不好,敬请谅解。
开门见山的说,我是在Button控件上添加该方法的,于是我去看了下Button的源码发现了个惊人现象,Button里的源代码居然如此简洁。我之前还以为onClick 方法是在Button这个类中的。结果发现源码如下:
@RemoteView
public class Button extends TextView {
public Button(Context context) {
this(context, null);
public Button(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.buttonStyle);
public Button(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
public Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
public CharSequence getAccessibilityClassName() {
return Button.class.getName();
就是这么简洁,我于是想找到button的onClick方法定义在哪里,我进入了button的父类TextView去看了看,发现TextView的方法很多,于是我下意识地心想:原来onClick方法在这里,怪不得TextView有点击事件,正当我准备去详细看看这个方法时发现在这个类里找了很久也没有找到这个方法。难道这个方法不在TextView里?我又怀着激动地心情点开了TextView的父类View去瞧了瞧。在TextView里终于有了重要发现。
* Interface definition for a callback to be invoked when a view is clicked.
public interface OnClickListener {
* Called when a view has been clicked.
* @param v The view that was clicked.
void onClick(View v);
在TextView里定义了一个CallBack接口当View被点击时会被反射调用。并且onClick抽象方法终于找到了,方法参数中确确实实传入了View。于是只要找到实现这个接口的实类这个问题就可以得到解决了,我便迫不及待地去寻找,接着找到了下面代码:
private static class DeclaredOnClickListener implements OnClickListener {
private final View mHostV
private final String mMethodN
private Method mM
public DeclaredOnClickListener(@NonNull View hostView, @NonNull String methodName) {
mHostView = hostV
mMethodName = methodN
public void onClick(@NonNull View v) {
if (mMethod == null) {
mMethod = resolveMethod(mHostView.getContext(), mMethodName);
mMethod.invoke(mHostView.getContext(), v);
} catch (IllegalAccessException e) {
throw new IllegalStateException(
"Could not execute non-public method for android:onClick", e);
} catch (InvocationTargetException e) {
throw new IllegalStateException(
"Could not execute method for android:onClick", e);
源码中一个静态类DeclaredOnClickListener 实现了OnClickListener 接口,并且重写了onClick方法。
mMethod.invoke(mHostView.getContext(), v);这行代码用传入的方法名反射实现了方法调用,并且传入的参数是一个上下文,还有一个是View!
所以我们在布局文件中设置的点击事件必须在代码方法中传入一个View才能使上述代码运行成功。
以上就是我对在布局文件中设置点击事件的一种理解,有理解错误之处还望大侠批评指正小弟。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2256次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'ios中怎么样去截取加载的js中的button的点击事件_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
ios中怎么样去截取加载的js中的button的点击事件
我有更好的答案
.:xxx&(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType{
NSString *requestString = [[request1 URL] absoluteString];
NSString *exchangeProtocol = @&
采纳率:93%
为您推荐:
换一换
回答问题,赢新手礼包

我要回帖

更多关于 vue 传入事件对象 的文章

 

随机推荐