您的位置:首页 > 移动开发 > IOS开发

2013斯坦福大学iOS应用开发学习笔记 11 Table View and iPad

2015-05-30 10:17 701 查看
主要学习了关于 protocol 和 delegate 的知识,还不是特别懂,没有搞清楚其中的关系,但是希望慢慢能理清楚吧

关于protocol

在.h文件中:

@interface ImageViewController :UIViewController
在.m文件中:

@interfaceImageViewController () <UIScrollViewDelegate,UISplitViewControllerDelegate>
这行代码声明,ImageViewController采用了UIScrollViewDelegate协议。

并且在.m文件中重写了方法

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
于是,ImageViewController有资格,可以作为_scrollView的delegate来帮它完成ScrollView的动作

关于delegate

@property (weak,
nonatomic) IBOutletUIScrollView *scrollView;
并且在setScrollView方法中有

_scrollView.delegate =self;
于是,属性scrollView使用delegate完成缩放动作

关于代码设计:
MCV设计方式
代码中创建的对象有
Model

@interfaceFlickrPhotosTVC
:UITableViewController

@interface JustPostedFlickrPhotosTVC :FlickrPhotosTVC
@interface ImageViewController :UIViewController

在FlickrPhotosTVC中,完成的方法有:

关于UITableViewDataSource的方法:
numberOfSectionsInTableView,numberOfRowsInSection,cellForRowAtIndexPath

NSIndexPath用来主要用 来标识当前cell的在tableView中的位置,该类别有section和row两个属性,前者标识当前cell处于第几个section中,后者代
表在该section中的第几行。
cellIdentifier识别@“Flickr Photo Cell”
关于Navigation的方法:prepareImageController和prepareForSegue
prepareImageController实现prepare the given ImageViewController to show the given photo
prepareForSegue是实现get the new view controller and the identifier of segue is @"Display Photo"

在JustPostedFlickrPhotosTVC中,具体从Flickr里面fetch照片

在ImageViewController中,主要是segue出来的scrollView界面,并且执行FlickrFetcher,从而得到photo
《iOS编程之美》里就有对delegate的五部曲总结:

1. 委托者声明一个delegate

2. 委托者调用protocol内的方法

3. 关联委托者和被委托者

4. 被委托者遵循delegate协议

5. 被委托者重写protocol内的方法

其以SceneB向SceneA传值,利用delegate实现页面之间的数据传递

委托者:SceneB 被委托者:SceneA

@protocol sceneBVCDelegate <NSObject>

- (void) method

@end

1. 声明一个property为 id<protocol> delegate

2. [self.delegate sceneBViewController:self didInputed: self.inputInformation.text];

将UITextLabel的内容通过protocol内的方法传递给被委托者,即SceneA

3. 利用segue的正向传值

因此在prepareForSegue中,SceneB.delegate = self  //prepareForSegue是在SceneAViewControl.m文件中,即为SceneB.delegate = SceneA的意思

4. 被委托者遵循delegate协议protocol

因此@interface SceneAViewController: UIViewController <sceneBVCDelegate>

5. 被委托者重写method

self.UILabel.text = sceneBVC传入的string

结合官方给出protocol的UIScrollViewDelegate

委托者为ScrollView,被委托者为ImageView

1. 声明一个delegate属性,_scrollView是实例变量,类型为UIScrollView,因此可以说明,内部已经有delegate属性

2. method怎么调用???不是很清楚!!!

3. 在setScrollView中设置delegate为self(ImageView)

4. 被委托者遵循<UIScrollViewDelegate>

5. ImageViewController是被委托者,因此在.m文件中重写zoom方法

在AB传递数据中,还用到了TextLabel

1. 内部有类型为id<UITextFieldDelegate>
的delegate;

2. 键盘点击Return之后,会调用方法textFieldShouldReturn:    怎么调用的???不晓得!!!

3. 在storyborad中建立委托和被委托的关系,被委托者为SceneB

4. 被委托者SceneB声明的时候,加入<UITextFieldDelegate>

5.SceneB的.m文件应该重写方法textFieldShouldReturn:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: