IOS统一标题栏的右侧按钮 ios 统一 导航栏IOSqq音乐导航栏统一 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这种做法和我们以前在NavigationItem上放置购物车图标一样 只是放个图标而不是按钮?logo? [self.navigationController.view addSubview:self.shareNavleftView]; 这个放个图标我能做出来,但是点击事件我暴露不出来,我自定义了一个UIBarButtonItem ,然后里面放了一个UIImageView ,ImageView监听UITapGestureRecognizer点击事件 ,然后通过Delegate将事件暴露出去,但是在vc当中添加了,运行就出错 下面是YbrRightBarButtonItem.h#import <UIKit/UIKit.h>@class YbrRightBarButtonItem;@protocol YbrRightBarButtonItemDelegate <NSObject>@optional- (void)rightBarButtonClick:(YbrRightBarButtonItem *) rightBarBtn;@end@interface YbrRightBarButtonItem : UIBarButtonItem-(YbrRightBarButtonItem *) initWithName;@property (nonatomic, weak) id<YbrRightBarButtonItemDelegate> delegate;@endYbrRightBarButtonItem.m@implementation YbrRightBarButtonItem-(YbrRightBarButtonItem *) initWithName { UIImageView * myAnimatedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"goTo"]]; myAnimatedView.userInteractionEnabled = YES; UITapGestureRecognizer *singleTap =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(toPlay)]; [myAnimatedView addGestureRecognizer:singleTap]; UIBarButtonItem * right = [[UIBarButtonItem alloc] initWithCustomView:myAnimatedView]; return (YbrRightBarButtonItem *)right;}-(void) toPlay { if ([self.delegate respondsToSelector:@selector(rightBarButtonClick:)]) { [self.delegate rightBarButtonClick:self]; }}@end下面是VC.m YbrRightBarButtonItem *right = [[YbrRightBarButtonItem alloc] init]; right = [right initWithName]; right.delegate = self; self.navigationItem.rightBarButtonItem = right; 6楼是我的代码帮下忙看下哪里有问题VC.m应该是 YbrRightBarButtonItem *right = [[YbrRightBarButtonItem alloc] initWithName]; right.delegate = self; self.navigationItem.rightBarButtonItem = right; 因为right的实例根本不是YbrRightBarButtonItem,而是UIBarButtonItem,而UIBarButtonItem是没有delegate这个属性的 因为right的实例根本不是YbrRightBarButtonItem,而是UIBarButtonItem,而UIBarButtonItem是没有delegate这个属性的那应该怎么办呢??? 其实你不用在imageView上放置手势识别器,你可以封装一个工具方法,这个方法返回一个构建好的UIBarButtonItem(上面显示一张图片),接下来分为两种方式:1. 如果这个item的点击都会导致不同的操作,即由VC决定item的事件,那你就在构建UIBarButtonItem的工具方法中加入两个参数,一个target,一个acction,由VC在调用工具方法时指定。2. 如果这个item的点击总是会进行相同的操作,那你就不用在工具方法中加入target和action参数,应由一个统一的对象来处理点击事件,例如AppDelegate。 寻找app客户端开发商(有过太平洋电脑网和爱卡汽车网的客户端开发经验) 在windows平台下开发objective-c2.0程序,如何显示中文? 求最新lion下载地址。 [急]苹果开发者平台 新协议更新不了问题 IOS 获取出口路由的MAC地址 新人求救:coredata修改实体对象再重新生成类文件,编译显示找不到 急急急!!! 登录界面的记住密码按钮,如何在下次app启动时显示上次关闭前的状态? 新手求助:为什么layoutSubview方法不调用? 使用Masonry给视图添加约束 Swift中NSURL转码问题 我日你妈,我自己上传的资源,还不让我下载,还要满足资源积分
@class YbrRightBarButtonItem;@protocol YbrRightBarButtonItemDelegate <NSObject>
@optional
- (void)rightBarButtonClick:(YbrRightBarButtonItem *) rightBarBtn;
@end@interface YbrRightBarButtonItem : UIBarButtonItem
-(YbrRightBarButtonItem *) initWithName;
@property (nonatomic, weak) id<YbrRightBarButtonItemDelegate> delegate;
@endYbrRightBarButtonItem.m@implementation YbrRightBarButtonItem-(YbrRightBarButtonItem *) initWithName {
UIImageView * myAnimatedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"goTo"]];
myAnimatedView.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTap =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(toPlay)];
[myAnimatedView addGestureRecognizer:singleTap];
UIBarButtonItem * right = [[UIBarButtonItem alloc] initWithCustomView:myAnimatedView];
return (YbrRightBarButtonItem *)right;
}-(void) toPlay {
if ([self.delegate respondsToSelector:@selector(rightBarButtonClick:)]) {
[self.delegate rightBarButtonClick:self];
}
}
@end
下面是VC.m
YbrRightBarButtonItem *right = [[YbrRightBarButtonItem alloc] init];
right = [right initWithName];
right.delegate = self;
self.navigationItem.rightBarButtonItem = right;
VC.m应该是
YbrRightBarButtonItem *right = [[YbrRightBarButtonItem alloc] initWithName];
right.delegate = self;
self.navigationItem.rightBarButtonItem = right;
1. 如果这个item的点击都会导致不同的操作,即由VC决定item的事件,那你就在构建UIBarButtonItem的工具方法中加入两个参数,一个target,一个acction,由VC在调用工具方法时指定。
2. 如果这个item的点击总是会进行相同的操作,那你就不用在工具方法中加入target和action参数,应由一个统一的对象来处理点击事件,例如AppDelegate。