我经常发现自己写了“实用”类,可以在我的项目中重复使用。 例如,假设我有一个“地址簿”视图。 我可能想要使用我的地址簿来select发送电子邮件的人员,或者将其添加到会议请求中的人员。 我开发了这个视图控制器,以便电子邮件控制器和会议控制器可以使用某种callback机制来让调用者知道用户是否从地址簿中select了某个人,或者他们被取消了。 在这种情况下,似乎基本上有四种(合理的)方法。 在AddressBookController上创build一个“AddressBookDelegate”协议和相应的委托属性。 然后使用协议中定义的消息来传递结果(类似于UIActionSheetDelegate)。 在AddressBookController上创build一个“非正式”的“AddressBookDelegate”协议和一个相应的委托属性,但委托属性的types将是“id”,并在运行时检查“respondsToSelector:”,看看委托是否实现了我们的方法需要(似乎大部分框架的东西已经开始这样)。 向AddressBookController传递一个表示委托的id,以及两个SEL,它们指定在用户select用户或取消请求时调用的方法。 我看到的好处是, 假设一个控制器支持发送电子邮件和build立会议(在这个例子中,我知道这似乎是不好的devise…但是可以想象一个更一般的情况,这对于公用事业类似乎是完全合理的) – 在这种情况下,你可以传递AddressBookController的不同SEL,具体取决于你是将用户添加到电子邮件中,还是将用户添加到会议中……这是对iVar的巨大改进,用于表示控制器的“状态”。 通过AddressBookController两个块; 一个在用户从地址簿中select一个人时运行,另一个在用户取消请求时运行。 这些积木对我来说非常有用,而且更加优雅,我发现自己几乎不知道什么时候不使用它们。 我希望更有经验的StackOverflow社区的成员比我可以帮助他们对这个主题的想法。
我总是想知道什么时候在iPhone上使用UIView和UIViewController。 我知道你不应该使用UIViewController,除非它是全屏视图,但是还有其他的指导方针吗? 例如,我想构build一个模式叠加层 – 一个在当前屏幕上滑动的屏幕。 如果这个模式覆盖是全屏的,它应该是一个UIViewController? 上一次我构build这样的东西,我分类UIViewController,但现在我想知道这是否是正确的。
我认为学习一种新的编程语言的最好方法之一是深入源代码,看看有经验的编程人员编写。 我发现这种问题在其他语言的堆栈溢出问题,但没有针对Objective-C。 我发现最接近这个关于好看的Cocoa用户界面的问题 ,但我正在考虑一般的代码质量,比如很好的使用习惯用法和devise模式,以及可用的文档。 另一个好的特点是代码基础足够大,需要真正的组织纪律,但是又足够小,初学者可以适应他/她的头脑。 您认为什么是符合这些标准的高质量开源项目?
我在修改线程内的视图时遇到问题。 我试图添加一个子视图,但需要大约6秒或更长时间来显示。 我终于搞定了,但我不知道如何。 所以我想知道为什么它的工作和以下方法有什么区别: //this worked -added the view instantly dispatch_async(dispatch_get_main_queue(), ^{ //some UI methods ej [view addSubview: otherView]; } //this took around 6 or more seconds to display [viewController performSelectorOnMainThread:@selector(methodThatAddsSubview:) withObject:otherView waitUntilDone:NO]; //Also didnt work: NSNotification methods – took also around 6 seconds to display //the observer was in the viewController I wanted to […]
我需要使用像NSLog但没有时间戳和换行符,所以我使用printf 。 我怎样才能用这个NSString ?
什么是正确的方式来实现状态栏和导航栏上的UIView顶部? 替代文字http://img.skitch.com/20081217-t78sdixk37hqgdh1ia2fgec4st.png
我试图从Xcode 6中打开iOS 8中的电子邮件镇静,但得到一个错误。 如果我从Xcode 5尝试,相同的代码工作正常。后来我从苹果开发者门户网站下载了一个示例代码: https://developer.apple.com/library/content/samplecode/MessageComposer/Introduction/Intro.html 但结果是一样的。 有没有什么,或者一些设置,我错过了优化Xcode 6的代码 这里是代码:在我的button行动 MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [picker setSubject:@"Hello from California!"]; // Set up recipients NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"]; NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; [picker setToRecipients:toRecipients]; [picker setCcRecipients:ccRecipients]; [picker setBccRecipients:bccRecipients]; // Attach an image to […]
我有一些需要在UIWebView完成加载文档后运行的代码。 为此,我已经将UIWebView的委托设置为我的控制器,并实现了webViewDidFinishLoading方法。 这将被多次调用,具体取决于要加载的页面的types。 我不确定是否因为Ajax请求,图片请求,甚至是内部框架。 有没有办法告诉主要的请求已经完成,这意味着HTML是完全加载的? 或者也许延迟我的代码发射,直到所有这些事件完成射击?
我怎样才能传递一个参数到NSTimer调用的方法? 我的计时器看起来像这样: [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(updateBusLocation) userInfo:nil repeats:YES]; 我想能够传递一个string的方法updateBusLocation。 另外,我应该在哪里定义方法updateBusLocation? 在创build计时器的同一个.m文件中? 编辑: 其实我还有问题 我收到错误消息: 终止应用程序由于未捕获的exception“NSInvalidArgumentException”,原因:' * – [MapKitDisplayViewController updateBusLocation]:无法识别的select器发送到实例0x4623600' 这是我的代码: – (IBAction) showBus { //do something [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateBusLocation) userInfo:txtFieldData repeats:YES]; [txtFieldData release]; } – (void) updateBusLocation:(NSTimer*)theTimer { NSLog(@"timer method was called"); NSString *txtFieldData = [[NSString alloc] initWithString:(NSString*)[theTimer userInfo]]; if(txtFieldData == busNum.text) { //do […]
我怎样才能将一个浮点数乘以目标C中的下一个整数值? 1.1 -> 2 2.3 -> 3 3.4 -> 4 3.5 -> 4 3.6 -> 4 1.0000000001 -> 2