UITabBar,快捷菜单,block实现传值

///创建第一个视图控制器对象

firstViewController *firstVC=[[firstViewController alloc] init];

//创建第一个naVC

UINavigationController *firstnaVC=[[UINavigationController alloc] initWithRootViewController:firstVC];

//创建tabbar上按钮及其内容

firstVC.tabBarItem=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemHistory tag:1000];

//提示有多少消息

firstVC.tabBarItem.badgeValue=@"+99";

//创建第二个

secendViewController *secVC=[[secendViewController alloc] init];

UINavigationController *secnaVC=[[UINavigationController alloc] initWithRootViewController:secVC];

secVC.tabBarItem=[[UITabBarItem alloc] initWithTitle:@"朋友圈"                         image:[UIImage imageNamed:@"2.png"] selectedImage:[UIImage imageNamed:@"5.png"]];

//创建第三个

thirdViewController *thirdVC=[[thirdViewController alloc] init];

UINavigationController *thirdnaVC=[[UINavigationController alloc] initWithRootViewController:thirdVC];

thirdnaVC.tabBarItem=[[UITabBarItem alloc] initWithTitle:@"设置" image:[UIImage imageNamed:@"2.png"] tag:1001];

//创建第四个

fourViewController *fourVC=[[fourViewController alloc] init];

UINavigationController *fournaVC=[[UINavigationController alloc] initWithRootViewController:fourVC];

fourVC.tabBarItem=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:1002];

//创建第五个

fiveViewController *fiveVC=[[fiveViewController alloc] init];

UINavigationController *fivenaVC=[[UINavigationController alloc] initWithRootViewController:fiveVC];

fiveVC.tabBarItem=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemRecents tag:1003];

//创建第六个

sixViewController *sixVC=[[sixViewController alloc] init];

UINavigationController *sixnaVC=[[UINavigationController alloc] initWithRootViewController:sixVC];

sixVC.tabBarItem=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks tag:1004];  

#pragma mark 按钮创建好,然后创建一个UItabbarcontroller让所有额按钮显示出来

UITabBarController *tabVC=[[UITabBarController alloc] init];

//tabbarcontroller通过一个数组来管理所有要显示出来的naVC

tabVC.viewControllers=@[firstnaVC,secnaVC,thirdnaVC,fournaVC,fivenaVC,sixnaVC];

self.window.rootViewController=tabVC;

//tabbar进行外观设置

tabVC.tabBar.translucent=NO;

//背景颜色

tabVC.tabBar.barTintColor=[UIColor cyanColor];

//点击之后按钮的颜色

tabVC.tabBar.tintColor=[UIColor blackColor];

//设置代理人

tabVC.delegate=self;

//起始位置,当前的Viewcontroller

//tabVC.selectedIndex=1;

//内存管理

[tabVC release];

[fivenaVC release];

[fiveVC release];

[fourVC release];

[fournaVC release];

[thirdnaVC release];

[thirdVC release];

[secnaVC release];

[secVC release];

[firstnaVC release];

[firstVC release];    

return YES;}

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{

viewController.tabBarItem.badgeValue=@"";

viewController.tabBarItem.badgeValue=nil;

}

2.快捷菜单

//每次在长按手势之后都要把VC变成第一响应者

[self becomeFirstResponder];

// 通过手势, 找到手势所添加的cell

UITableViewCell *cell=(UITableViewCell *)longPress.view;

//创建一个快捷菜单,单例.

UIMenuController *menu=[UIMenuController sharedMenuController];

//给这个快捷菜单进行定位

[menu setTargetRect:cell.frame inView:cell.superview];

//让菜单显示出来

[menu setMenuVisible:YES animated:YES];

//如果想使用自定义的功能

if (menu.menuItems == nil) {

UIMenuItem *flag=[[UIMenuItem alloc] initWithTitle:@"测试" action:@selector(flag)];

//把这个按钮添加到快捷菜单上

[menu setMenuItems:@[flag]];} 

//按钮的方法必须要实现,无论系统方法还是自定义方法,如果不实现对应的方法,不会添加到快捷菜单上}

//#pragma mark 快捷菜单捆绑了一个方法,这个方法必须实现,如果不实现,快捷菜单没法显示

-(BOOL)canBecomeFirstResponder{

return  YES;}

-(void)delete:(id)sender{

NSLog(@"删除");}

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

UIMenuController *menu=[UIMenuController sharedMenuController];

[menu update];  }

-(void)copy:(id)sender{

NSLog(@"复制");}

-(void)select:(id)sender{

NSLog(@"选择");}

-(void)flag{

NSLog(@"sds");}


3.block实现传值
利用block来传值,一般不需要返回值.需要三个步骤,首先在写完的block方法中,把block实现之后,在第二界面写一个属性,属性要用copy,防止block地址在栈区,不能控制block的消失.
然后再第一界面把实现方法的按钮传进去,之后在第二界面里实现调用方法,把值传过去

//没有参数,没有返回值的block

//通过block,改变self.view的背景颜色

void (^block)()=^(){

NSLog(@"测试");

self.view.backgroundColor=[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];};

//调用

block();

//通过block实现从后向前传值

//block传值不需要返回值,因为调用更需要返回值,所以传值的时候只要参数,不需要返回值

void(^block)(NSString *)=^(NSString * str){

NSLog(@"%@",str);};

void(^blockl)(NSArray *)=^(NSArray *arr){

//传过来的数据的处理都在block中进行

for (NSString *str in arr) {

NSLog(@"%@",str);}};

secendViewController *sec=[[secendViewController alloc] init];

sec.delegate=self;

//2.通过第二页属性接收block

//sec.block=block;

sec.blockl=blockl;

[self.navigationController pushViewController:sec animated:YES];

[sec release];

//[self.delegate changeColor];

[self.navigationController popToRootViewControllerAnimated:YES];

//3.调用传过来的block

//self.block(@"111");self.blockl(@[@"1",@"2",@"sds",@"3wwe"]);

@interface secendViewController : UIViewController

@property(nonatomic,assign)id<secendViewControllerdelegate>delegate;

//1.写一条属性,负责接受第一页向第二页传递过来的block

@property(nonatomic,copy)void(^block)();

@property(nonatomic,copy)void(^block)(NSString *);

@property(nonatomic,copy)void(^blockl)(NSArray *);


另外在说一点,就是在写属性时,属性实现了3个方法,一个getter和一个setter方法,还有就是成员变量
而我们要写对系统的getter和setter方法实现重写的时候,一般成员变量系统会认为你也要会把成语那边量实现重写,不会管成员变量.
我们一般采用

//属性的实现

关键词@synthesize 前面是属性名,后面是所对应的成员变量

/@synthesize name=_name;//Xcode4.5之后才开始不写得,所以在之前的老得工程里,还有大量的@synthesize






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值