Tag: 委托

将代表设置为ARC下的零?

我正在使用ARC编写iOS应用程序,并定位iOS 5+。 假设我写了一个具有委托属性的自定义视图对象。 在声明委托属性时,我把它作为避免保留循环的弱引用,以便在实际委托对象(控制器)被销毁时,我的自定义视图也将被销毁,如下所示: @interface MyCustomView : UIView @property (nonatomic, weak) id<MyCustomViewDelegate> delegate; @end 一切都很好。 好了,现在我正在编写控制器对象,并且它引用了两个视图对象:我的自定义视图和Apple提供的UIKit视图,这两个视图都声明委托属性,控制器是这两个视图的委托。 也许它看起来像这样: @interface MyViewController : UIViewController <MyCustomViewDelegate, UITableViewDataSource, UITableViewDelegate> @property (nonatomic, strong) MyCustomView *customView; @property (nonatomic, strong) UITableView *tableView; @end @implementation MyViewController – (void)viewDidLoad { self.customView.delegate = self; self.tableView.dataSource = self; self.tableView.delegate = self; } @end 我的问题是这样的:我是否需要重写dealloc设置一个或两个委托为零? 我的意思是,根据我的理解,UIKit视图(在这种情况下, tableView )的委托属性实际上并没有被声明为弱引用,而是一个__unsafe_unretained引用,用于向后兼容非ARC版本的iOS。 […]

如何inheritanceUIScrollView并使委托属性保密

这是我想要达到的: 我想要一个UIScrollView子类有更多的function。 这个子类应该能够在滚动上作出反应,所以我必须将委托属性设置为self来接收事件,如: – (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { … } 另一方面,其他类也应该能够接收这些事件,就像他们使用基本的UIScrollView类一样。 所以我有不同的想法如何解决这个问题,但所有这些都不完全满足我:( 我的主要做法是使用像这样的自己的委托属性: @interface MySubclass : UIScrollView<UIScrollViewDelegate> @property (nonatomic, assign) id<UIScrollViewDelegate> myOwnDelegate; @end @implementation MySubclass @synthesize myOwnDelegate; – (id) initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.delegate = self; } return self; } // Example event – (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { // Do […]

iOS:使用UIView的“drawRect:”与其图层的delagate“drawLayer:inContext:”

我有一个类是UIView的子类。 我可以通过实现drawRect方法或通过实现drawLayer:inContext:这是CALayer的委托方法来在视图内绘制东西。 我有两个问题: 如何决定使用哪种方法? 每个人都有一个用例吗? 如果我实现drawLayer:inContext:它被调用(并且drawRect不是,至less就放一个断点可以告诉),即使我没有分配我的视图作为CALayer委托通过使用: [[self layer] setDelegate:self]; 如果我的实例没有被定义为图层的委托,那么如何调用委托方法呢? 如果drawLayer:inContext:被调用,什么机制可以防止drawRect被调用?

无法find协议声明

我有两个对象,都是视图控制器。 第一个(我把它称为viewController1)声明一个协议。 第二个(毫不奇怪,我将命名viewController2)符合这个协议。 XCode给我一个构build错误:'找不到viewController1的协议声明' 我已经看到了这个问题上的各种问题,我确定这是一个循环错误,但我不能看到它在我的情况下… 下面的代码 viewController1.h @protocol viewController1Delegate; #import "viewController2.h" @interface viewController1 { } @end @protocol viewController1Delegate <NSObject> // Some methods @end viewController2.h #import "viewController1.h" @interface viewController2 <viewController1Delegate> { } @end 最初,我在viewController1的协议声明的上面有导入行。 这阻止了这个项目的build设。 在search完成后,我意识到了这个问题,并转换了两条线。 我现在得到一个警告(而不是一个错误)。 该项目build立良好,实际运行完美。 但我仍然觉得一定有什么不对的地方可以给予警告。 现在,就我所知,当编译器到达viewController1.h时,它看到的第一件事就是协议的声明。 然后导入viewController.h文件,并看到这个实现了这个协议。 如果是以相反的方式编译它们,它首先会查看viewController2.h,并且首先会导入viewController1.h,其中第一行是协议声明。 我错过了什么吗?

使用委托和协议在2 UIViewController之间传递数据

我知道这个问题已经在这里被问及过很多次了。 但是,我是第一次处理这个事情,仍然无法在脑海中得到完美的实现。 这里的代码我有委托方法我实现从SecondViewController传递数据到FirstViewController 。 FirstViewController.h #import "SecondViewController.h" @interface FirstViewController : UITableViewController<sampleDelegate> @end FirstViewController.m @interface FirstViewController () // Array in which I want to store the data I get back from SecondViewController. @property (nonatomic, copy) NSArray *sampleData; @end @implementation FirstViewController – (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SecondViewController *controller = [[SecondViewController alloc] init]; [self.navigationController pushViewController:controller animated:YES]; } […]

什么是协议和委托,他们如何在IOS中使用?

我真的很困惑代表和议定书的概念。 它们是否等同于Java中的接口和适配器类? 他们如何工作? 到目前为止,我读过的资源都没有帮助。 “委托是一个简单而强大的模式,其中一个程序中的一个对象代表另一个对象或者与其他对象协同工作。委托对象保持对另一个对象的引用 – 委托 – 并在适当的时候发送消息对它“。 我不知道这是什么意思。 有人可以解释他们是什么,并举一个简单的例子? 提前致谢! 编辑: 据我了解, 1)委托实现协议(接口的另一个名称) 2)对象注册一个委托(实现一个协议) 3)对象可以调用委托的协议方法 因此,委托将对象与协议连接起来。 如果我错了,请纠正我。 我仍然不明白为什么对象本身不能实现一个协议? 它可以更容易!

键盘和光标显示,但我不能在UITextFields和UITextViews内部input

在iOS 6 GM的iPad上。 我有6个UITextFields,3个UITextViews和一个触发popover / actionsheet的UIButton。 当我selectUITextFields或UITextViews之一,popup键盘和光标出现,但我不能input文字。 如果我按下UIButton来显示popup窗口,然后点击它以closures它并返回到UITextFields或UITextViews,它们的工作。 我有UITextxxxx.delegate = self; 为他们全部设置。 在我的.h文件的xibs,UITextFieldDelegate和UITextViewDelegate中勾选了“Enabled”和“User Interaction Enabled”,以及: – (BOOL)disablesAutomaticKeyboardDismissal { return NO; } – (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return YES; } – (BOOL)textFieldShouldEndEditing:(UITextField *)textField { return YES; } – (IBAction)textFieldReturn:(id)sender { [sender resignFirstResponder]; } – (BOOL)textViewShouldBeginEditing:(UITextView *)textView { if (textView == notestextView){ [notestextView becomeFirstResponder]; } if (textView == […]