Self.ios navigationbarController = null 的连接吗

iosUINavigationController - 王朝网络 -
分享&&&&&当前位置: &&&&&&&&iosUINavigationControlleriosUINavigationController上一篇下一篇字体: ||
| 來源: 互联网&&  UINaviGationController通常被我们称为导航栏,他是视图与视图之间联系沟通的桥梁,一些著名的app都用到了他。下面我们来看一下如何建立一个navigation。  首先,我们通常新建工程是直接将视图控制器添加到window上,而现在有navigation以后,就多了一层:  
Appdelegete.h:   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
RootViewController *root = [[RootViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:root];//先将root添加在navigation上
[_window setRootViewController:nav];//navigation加在window上
[nav release];
[root release];
[self.window makeKeyAndVisible];
return YES;
  这样我们的navigation就加载上去了。下面我们来设置navigation的属性:     - (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.navigationController.navigationBar setTranslucent:NO];//设置navigationbar的半透明
self.title = @"navigationcontroller";//设置navigationbar上显示的标题
[self.navigationController.navigationBar setBarTintColor:[UIColor purpleColor]];//设置navigationbar的颜色
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonItemStyleDone target:self action:Nil];//设置navigationbar左边按钮
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:self action:Nil];//设置navigationbar右边按钮
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];//设置navigationbar上左右按钮字体颜色
  效果图如下:  这里还有一个属性常用,就是:   NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil nil];
UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr];
self.navigationItem.titleView =//设置navigation上的titleview
  效果如下:  对,我们看到中间的字变成了两个可选的按钮,这就是navigation的另一个属性:navigationitem.titleview。  下面我们再建立一个视图,看一下两个视图之前是怎样通信的。  在第二个视图中,我添加了一个button来显示,并加了一个成员变量来接收从第一个视图中穿过来的值: SecondViewController : UIViewController
@PRoperty (copy,nonatomic) NSString *
  - (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"second";
UIButton *aBUTTON = [[UIButton alloc]initWithFrame:CGRectMake(30, 30, 50, 30)];
[aBUTTON setTitle:_str forState:UIControlStateNormal];
[aBUTTON addTarget:self action:@selector(clicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:aBUTTON];
  然后我将第一个视图的右边按钮添加一个事件,点击按钮,就会推出第二个视图,并显示我们传过来的值:     - (void)clicked{
SecondViewController *second = [[SecondViewController alloc]init];
[self.navigationController pushViewController:second animated:YES];
second.str = @"hello!!";
[second release];
  下面,我们来运行一下:  点进按钮以后,我们的第二个视图推出,button显示了传过来的值。  然后我们点击回button,还有navigation另外一个方法:   - (void)clicked{
[self.navigationController popViewControllerAnimated:YES];
  这样就可以回到第一个视图。    uinavigationcontroller的一些简单的属性就先说到这里,欢迎留言补充,谢谢。相似文章&今日推荐&幽默笑话百态军事探索娱乐女性健康旅游互联网··············&&UINaviGationController通常被我们称为导航栏,他是视图与视图之间联系沟通的桥梁,一些著名的app都用到了他。下面我们来看一下如何建立一个navigation。
首先,我们通常新建工程是直接将视图控制器添加到window上,而现在有navigation以后,就多了一层:
Appdelegete.h:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
RootViewController *root = [[RootViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:root];//先将root添加在navigation上
[_window setRootViewController:nav];//navigation加在window上
[nav release];
[root release];
[self.window makeKeyAndVisible];
return YES;
这样我们的navigation就加载上去了。下面我们来设置navigation的属性:
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.navigationController.navigationBar setTranslucent:NO];//设置navigationbar的半透明
self.title = @"navigationcontroller";//设置navigationbar上显示的标题
[self.navigationController.navigationBar setBarTintColor:[UIColor purpleColor]];//设置navigationbar的颜色
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonItemStyleDone target:self action:Nil];//设置navigationbar左边按钮
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:self action:Nil];//设置navigationbar右边按钮
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];//设置navigationbar上左右按钮字体颜色
效果图如下:
这里还有一个属性常用,就是:
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil nil];
UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr];
self.navigationItem.titleView =//设置navigation上的titleview
效果如下:
对,我们看到中间的字变成了两个可选的按钮,这就是navigation的另一个属性:navigationitem.titleview。
下面我们再建立一个视图,看一下两个视图之前是怎样通信的。
在第二个视图中,我添加了一个button来显示,并加了一个成员变量来接收从第一个视图中穿过来的值:
@interface SecondViewController : UIViewController
@PRoperty (copy,nonatomic) NSString *
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"second";
UIButton *aBUTTON = [[UIButton alloc]initWithFrame:CGRectMake(30, 30, 50, 30)];
[aBUTTON setTitle:_str forState:UIControlStateNormal];
[aBUTTON addTarget:self action:@selector(clicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:aBUTTON];
然后我将第一个视图的右边按钮添加一个事件,点击按钮,就会推出第二个视图,并显示我们传过来的值:
- (void)clicked{
SecondViewController *second = [[SecondViewController alloc]init];
[self.navigationController pushViewController:second animated:YES];
second.str = @"hello!!";
[second release];
下面,我们来运行一下:
点进按钮以后,我们的第二个视图推出,button显示了传过来的值。
然后我们点击回button,还有navigation另外一个方法:
- (void)clicked{
[self.navigationController popViewControllerAnimated:YES];
这样就可以回到第一个视图。
uinavigationcontroller的一些简单的属性就先说到这里,欢迎留言补充,谢谢。&  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。&&&&&&&王朝美图& 03:07:02&&&&&&&转载本文&UBB代码&HTML代码复制到剪贴板...&更多内容··········&&&&频道精选&最新评论&&网友关注··········&&热点推荐&01&&02&&03&&04&&05&&06&&07&&08&&09&&10&&&&王朝女性&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&王朝分栏&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&王朝编程&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&王朝导购&&|&&|&&|&&|&&|&&|&&|&&|&&|&&|&王朝其他&&|&&|&&|&&|&&|&&|&&&&2005-&&版权所有&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&用NavigationController做手势返回时,一级视图中手势滑动导致界面瘫痪
[问题点数:40分,结帖人xyb0225]
用NavigationController做手势返回时,一级视图中手势滑动导致界面瘫痪
[问题点数:40分,结帖人xyb0225]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。通过UIActivityViewController实现更多分享服务
通过UIActivityViewController实现更多分享服务
Objective-C
我在这篇文章中,详细讲了UIDocumentInteractionController的用途和使用方法。而在iOS 6 SDK中,苹果提供了UIActivityViewController来让我们可以使用更多地服务。这篇文章,我就来介绍一下怎么通过UIActivityViewController实现更多地服务。
打开UIActivityViewController的API文档,我们可以看到UIActivityViewController的声明。
NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewController
我们可以看出UIActivityViewController是在iOS 6开始支持的,同样是不能在Apple TV的开发中使用。而且UIActivityViewController是直接继承UIViewController的,这意味着我们需要自己来展示和解散视图。
我使用在UIDocumentInteractionController测试中使用的Demo,GitHub地址是:。然后添加一个新的Button作为UIActivityViewController的触发事件,运行程序,就可以看到下面的界面啦(过程自行想象,哈哈)
接着我们在Button的触发方法里面开始操作UIActivityViewController来提供服务。首先,我们需要初始化一个UIActivityViewController的实例,UIActivityViewController提供了一个初始化方法:
- (instancetype)initWithActivityItems:(NSArray *)activityItems applicationActivities:(nullable NSArray&__kindof UIActivity *& *)applicationActivities NS_DESIGNATED_INITIALIZER;
官方文档对这俩个参数有详细的解释:
activityItems
The array of data objects on which to perform the activity. The type of objects in the array is variable and dependent on the data your application manages. For example, the data might consist of one or more string or image objects representing the currently selected content.
Instead of actual data objects, the objects in this array can be objects that adopt the UIActivityItemSource protocol, such as UIActivityItemProvider objects. Source and provider objects act as proxies for the corresponding data in situations where you do not want to provide that data until it is needed. Note that you should not resuse an activity view controller object that includes a UIActivityItemProvider object in its activityItems array.This array must not be nil and must contain at least one object.
applicationActivities
An array of UIActivity objects representing the custom services that your application supports. This parameter may be nil.
大概意思是这个方法接收俩个数组类型的参数,第一个数组内的对象代表的是我们想要操作的数据的一些表征,而且这个数组至少需要一个值,比如我们PDF文档的名称,URL;第二个数组指定了泛型,数组内的对象必须是UIActivity类型的对象,代表的是iOS系统支持的我们自定义的服务,关于这点我在后面自定义UIActivity服务的内容中会讲解,现在我们暂时置为nil。代码如下:
- (IBAction)presentPDFActivityView:(id)sender {
UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:@[@"Steve Jobs by waiter lsaacson", [[NSBundle mainBundle] URLForResource:@"Steve" withExtension:@"pdf"]] applicationActivities:nil];
UIActivityViewController是直接继承UIViewController的,看到这,你想象可以通过自己的需求来使用不同的方式展示UIActivityViewController啦,然而事与愿违。
官方文档中是这么说的: “When presenting the view controller, you must do so using the appropriate means for the current device. On iPad, you must present the view controller in a popover. On iPhone and iPod touch, you must present it modally”。 大概意思是说,展示UIActivityViewController的时候需要根据当前的设备类型选择合适的展示方式,在iPad设备上就必须在'popover'视图里面展示,在其他设备上,必须以模态视图展示。
个人认为开发必须持怀疑和验证的态度,所以我尝试在一个UINavigationController中push一个UIActivityController,代码如下:
- (IBAction)presentPDFActivityView:(id)sender {
UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:@[@"Steve Jobs by waiter lsaacson", [[NSBundle mainBundle] URLForResource:@"Steve" withExtension:@"pdf"]] applicationActivities:nil];
[self.navigationController pushViewController:activity animated:YES];
然后运行程序,点击Button,意料之中程序崩溃掉了,给出我们的错误反馈是:
15:03:03.733 ZSDocumentInteractionTest[] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'UIActivityViewController can only be used modally or as contentViewController in popover on iPad.'
*** First throw call stack:
CoreFoundation
0x7e65 __exceptionPreprocess + 165
libobjc.A.dylib
0xc10deb objc_exception_throw + 48
CoreFoundation
0x7d9d +[NSException raise:format:] + 205
0xe68e55 -[UIActivityViewController viewDidAppear:] + 533
0xe0949 -[UIViewController _setViewAppearState:isAnimating:] + 830
0xe12cc -[UIViewController _endAppearanceTransition:] + 262
0xbf63 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 1290
0x1d24 __49-[UINavigationController _startCustomTransition:]_block_invoke + 233
0xf4ad20 -[_UIViewControllerTransitionContext completeTransition:] + 101
0xcfff __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke95 + 834
0xf1076 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 644
0xce2af -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 241
0xce65e -[UIViewAnimationState animationDidStop:finished:] + 80
QuartzCore
0xc2fa0 _ZN2CA5Layer23run_animation_callbacksEPv + 308
libdispatch.dylib
0xf49b _dispatch_client_callout + 8
libdispatch.dylib
0x72af _dispatch_main_queue_callback_4CF + 1738
CoreFoundation
0xf7d09 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
CoreFoundation
0xb92c9 __CFRunLoopRun + 2073
CoreFoundation
0xb8828 CFRunLoopRunSpecific + 488
GraphicsServices
0x4ad2 GSEventRunModal + 161
0x4610 UIApplicationMain + 171
ZSDocumentInteractionTest
0xb6af main + 111
libdyld.dylib
0xd392d start + 1
libc++abi.dylib: terminating with uncaught exception of type NSException
我们看出错误说明是"UIActivityViewController can only be used modally or as contentViewController in popover on iPad."因此我们需要更换一下展示方法,在手机上已一个模态视图的方式展示,而在iPad上则作为popover的内容视图展示。代码如下:
- (IBAction)presentPDFActivityView:(id)sender {
UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:@[[[NSBundle mainBundle] URLForResource:@"Steve" withExtension:@"pdf"]] applicationActivities:@[[[ZSCustomActivity alloc] init]]];
activity.excludedActivityTypes = @[UIActivityTypeAirDrop];
// incorrect usage
// [self.navigationController pushViewController:activity animated:YES];
UIPopoverPresentationController *popover = activity.popoverPresentationC
if (popover) {
popover.sourceView = self.activityB
popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:activity animated:YES completion:NULL];
再次运行代码,点击Button,就可以看到下面的界面啦(完美展示)
然后我们就可以选择服务来操作和分享史蒂夫o乔布斯传啦。
excludedActivityTypes
UIActivityViewController相比于UIDocumentInteractionController优势除了可以添加额外的自定义服务,它还提供了非常好的原生服务的定制化功能。我们可以完全根据自己的需求,控制UIActivityViewController提供的系统服务的显示,比如我不想展示AirDrop这个功能,而这点在UIDocumentInteractionController是做不到的。想做到这一点,就需要使用到UIActivityViewController提供的一个属性:
@property(nullable, nonatomic, copy) NSArray&NSString& *excludedActivityT // default is nil. activity types listed will not be displayed
正如注释中提到的,excludedActivityTypes这个属性包含了所有不想在UIActivityViewController中展示的Item服务。excludedActivityTypes是一个字符串数组,所包含的内容必须是系统提供的UIActivity的activityType字符串,而系统提供的字符串如下:
NSString *const UIActivityTypePostToF
NSString *const UIActivityTypePostToT
NSString *const UIActivityTypePostToW
NSString *const UIActivityTypeM
NSString *const UIActivityTypeM
NSString *const UIActivityTypeP
NSString *const UIActivityTypeCopyToP
NSString *const UIActivityTypeAssignToC
NSString *const UIActivityTypeSaveToCameraR
NSString *const UIActivityTypeAddToReadingL
NSString *const UIActivityTypePostToF
NSString *const UIActivityTypePostToV
NSString *const UIActivityTypePostToTencentW
NSString *const UIActivityTypeAirD
如果我们不想展示AirDrop功能,我们把UIActivityTypeAirDrop添加到excludedActivityTypes里面:
activity.excludedActivityTypes = @[UIActivityTypeAirDrop];
运行程序,点击Button,我们可以看到下面的界面发生的变化。
自定义UIActivity服务
UIActivityViewController相比于UIDocumentInteractionController的最大优势就是UIActivityViewController所提供的自定义服务,我们可以通过UIActivity在UIActivityViewController上添加我们自定义的服务。
官方文档上对UIActivity有一段解释,&This class must be subclassed before it can be used. The job of an activity object is to act on the data provided to it and to provide some meta information that iOS can display to the user. For more complex services, an activity object can also display a custom user interface and use it to gather additional information from the user.&。其大概意思是,UIActivity必须通过继承来使用,它主要是操作给用户展示的信息,而且还可以操作展示定制化的界面来获取更多地数据信息。
现在我们打算自定义一个叫ZS Custom的服务,所以我们创建一个ZSCustomActivity得类来继承UIActivity,除此之外,我们必须重写下面的几个方法:
activityType
- (nullable NSString *)activityT
// default returns nil. subclass may override to return custom activity type that is reported to completion handler
这是用来标识自定义服务的一个字符串,而系统提供的服务的标识在上面我们已经提到了;为了迎合iOS SDK中的规范,我给它返回一个UIActivityTypeZSCustomMine,定义如下:
NSString *const UIActivityTypeZSCustomMine = @"ZSCustomActivityMine";
- (NSString *)activityType
return UIActivityTypeZSCustomM
activityTitle
- (nullable NSString *)activityT
// default returns nil. subclass must override and must return non-nil value
在UIActivityViewController中给用户展示的服务的名称,比如上面图片中的"Copy","Print",我们自定义的服务名称为ZS Custom:
- (NSString *)activityTitle
return NSLocalizedString(@"ZS Custom", @"");
activityImage
- (nullable UIImage *)activityI
// default returns nil. subclass must override and must return non-nil value
在UIActivityViewController中给用户展示的服务的图标。关于这里的图标,有非常严格的限制:
首先是图标的背景色,这里推荐最好的完全透明的背景色。
官方文档中是这么解释的,&The alpha channel of the image is used as a mask to generate the final image that is presented to the user. Any color data in the image itself is ignored. Opaque pixels have a gradient applied to them and this gradient is then laid on top of a standard background. Thus, a completely opaque image would yield a gradient filled rectangle&,意思大概是,在这里颜色数据会被忽略,而透明图层会被当做mask(蒙版图层),不透明的图片会显示成渐进色填充。
其次是图标的尺寸,在不同的设备需要不同的尺寸,因此需要准备一套图标。
iOS Version
Icon Size(pt)
iPhone、iPod Touch
iPhone、iPod Touch
canPerformWithActivityItems:
- (BOOL)canPerformWithActivityItems:(NSArray *)activityI
// override this to return availability of activity based on items. default returns NO
指定可以处理的数据类型,如果可以处理则返回YES
prepareWithActivityItems:
- (void)prepareWithActivityItems:(NSArray *)activityI
// override to extract items and set up your HI. default does nothing
在用户选择展示在UIActivityViewController中的自定义服务的图标之后,调用自定义服务处理方法之前的准备工作,都需要在这个方法中指定,比如可以根据数据展示一个界面来获取用户指定的额外数据信息
activityCategory
+ (UIActivityCategory)activityCategory NS_AVAILABLE_IOS(7_0); //
default is UIActivityCategoryAction.
UIActivityViewController中的服务分为了俩种,UIActivityCategoryAction和UIActivityCategoryShare,``UIActivityCategoryAction表示在最下面一栏的操作型服务,比如Copy、Print;UIActivityCategoryShare表示在中间一栏的分享型服务,比如一些社交软件。
performActivity
- (void)performA // if no view controller, this method is called. call activityDidFinish when done. default calls [self activityDidFinish:NO]
在用户选择展示在UIActivityViewController中的自定义服务的图标之后,而且也调用了prepareWithActivityItems:,就会调用这个方法执行具体的服务操作
需要的方法都重写好之后,运行程序,点击Button,就可以看到我们自定义的服务图标显示在了UIActivityViewController中。
补充之AirDrop
前面一直提到AirDrop,我们在这里额外补充一下AirDrop的相关知识点。AirDrop是在iOS 7中提供的,实现跨设备传输文档的功能。AirDrop的实现基于蓝牙创建一种类似WIFI的”点对点网络“,然后实现跨设备传输功能。
只是AirDrop的传输是有限制的,我们可以在我们的App中通过AirDrop传送内容,却不能实现通过AirDrop接收内容,因为,苹果把设备上通过AirDrop接收到的内容都放到了自家App上,比如仅仅传送文字时,在接收设备上就会通过Notes打开;如果传送图片,在接收设备上就会保存到Photos应用中;通过URL传送文件,在接收设备上就会通过Safari打开。
只要是有UIDocumentInteractionController和UIActivityViewController展示的地方,都可以展示AirDrop功能。关于AirDrop如何连接设备,如何传送,可以到百度经验找完美得教程。
您还没有登录!请或
阅读:3531
&2015 Chukong Technologies,Inc.
京公网安备89}

我要回帖

更多关于 数据库连接为null 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信