Protocol 模拟UI中一个按钮点击改变lable中的值

简介: 要求:在一个UIView界面中又一个lable和Button,想点击按钮之后改变lable的值,用协议委托实现 Protocol(ChangeText.h): #import @protocol ChangeText -(void)change:(NSString *)val;@end Button.

要求:在一个UIView界面中又一个lable和Button,想点击按钮之后改变lable的值,用协议委托实现

Protocol(ChangeText.h):

#import <Foundation/Foundation.h>

@protocol ChangeText <NSObject>

-(void)change:(NSString *)val;

@end

Button.h:

#import <Foundation/Foundation.h>
#import "ChangeText.h"
@interface Button : NSObject

@property(nonatomic,retain) id<ChangeText> delegate;

-(void)changetext:(NSString *)str;

@end

Button.m:

 
#import "Button.h"

@implementation Button

-(void)changetext:(NSString *)val
{
    if ([_delegate respondsToSelector:@selector(change:)]) {
        [_delegate change:val];
    }
}

- (void)dealloc
{
    [_delegate release];
    [super dealloc];
}

@end


创建一个遵循协议的View

ViewA.h:

#import <Foundation/Foundation.h>
#import "ChangeText.h"
#import "Button.h"
@interface ViewA : NSObject<ChangeText>

@property(nonatomic,retain)NSString* textValue;
@property(nonatomic,retain)Button *btn;

//实现协议的change方法
-(void)change;

@end

View.m:

#import "ViewA.h"

@implementation ViewA

+viewAWithText:(NSString *)val
{
    ViewA *a = [[[ViewA alloc] init] autorelease];
    a.textValue = @"text";
    //初始化Button,并且将当前实现了协议的ViewA赋给button他的委托方法
    Button *btn = [[[Button alloc] init] autorelease];
    btn.delegate = a;
    a.btn = btn;
    return a;
}

-(void)change:(NSString *)val
{
    self.textValue = val;
    NSLog(@"当前的view中文本值是:%@",self.textValue);
}

-(void)dealloc
{
    [_btn release];
    [_textValue release];
    [super dealloc];
}

@end

main:

#import <Foundation/Foundation.h>
#import "ViewA.h"
#import "Button.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        ViewA *view = [ViewA viewAWithText:@"text"];
        NSLog(@"当然view中的文本值是:%@",view.textValue);
        [view.btn changetext:@"lable"];
    }
    return 0;
}

结果:

2013-08-05 17:23:22.754 按钮点击[2144:303] 当然view中的文本值是:text

2013-08-05 17:23:22.756 按钮点击[2144:303] 当前的view中文本值是:lable

相关文章
|
5月前
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
764 1
|
5月前
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
171 0
|
图形学
unity判断鼠标在不在UI上
unity判断鼠标在不在UI上
|
7月前
|
JavaScript 前端开发 Java
若依框架---选中某值 其他值自动回调填充
若依框架---选中某值 其他值自动回调填充
203 0
|
JavaScript 开发工具 git
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
1293 0
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
VUE-element-admin菜单栏图标选中状态跟随文字颜色状态变化
VUE-element-admin菜单栏图标选中状态跟随文字颜色状态变化
1098 0
VUE-element-admin菜单栏图标选中状态跟随文字颜色状态变化
|
缓存
Element 通知组件 Notification 支持同类型的提示信息只弹出一次!!!
Element 使用闭坑指南 • ElementUI 为 DatePicker 日期选择器组件添加前缀说明文字 • 生成以周统计的表头,跨月份的周算在后一个月 • Element Table 可以实现哪些常见的有用的功能 • Element UI Loading 加载组件动态变更 text 值(加载文案)
1057 0
Element 通知组件 Notification 支持同类型的提示信息只弹出一次!!!
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
734 0
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
PyQt5 技术篇-通过参数控制Dialog窗口增加?问号按钮
PyQt5 技术篇-通过参数控制Dialog窗口增加?问号按钮
271 0
PyQt5 技术篇-通过参数控制Dialog窗口增加?问号按钮
|
C# 索引
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
原文:WPF中,多key值绑定问题,一个key绑定一个界面上的对象 问题说明: 当用到dictionary来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路: 一种是写一个自定义的扩展类,类似Binding,这里取名为“MyBinding”,在binding类内部实现key的绑定。
1029 0