2017-09-06 1 views
1

iMessage 확장에 대한 iMessage 응용 프로그램 자습서는 Swift에 있습니다. 객관적 -c에서 초보자이며 iMessage 확장을 신속하게 구현해야하므로 Objective-C로 코드를 작성하고 싶습니다. MSStickerBrowserViewController 일부는 어떻게 UITableViewController datasrouce 프로토콜 권리를 사용하는 이유는 무엇입니까?MSStickerBrowserViewController를 객관적인 c와 함께 사용

그래서 이렇게 내 iMessage를 확장 응용 프로그램을 구현 :

@interface MessagesViewController()<MSStickerBrowserViewDataSource> 
@property (strong, nonatomic) NSMutableArray *stickerList; 
@end 

을 난 이미

stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index 

(NSInteger) numberOfStickersInStickerBrowserView:(MSStickerBrowserView *)stickerBrowserView 

방법을 구현 속성으로 stickerList init을했다 viewController의

그리고 나는 MSStickerViewController을 추가 괜찮을 것이라고 생각하고 내 일이

MSStickerBrowserViewController *stickerBrowserViewController = [[MSStickerBrowserViewController alloc]initWithStickerSize:MSStickerSizeRegular]; 
stickerBrowserViewController.view.backgroundColor = [UIColor redColor]; 
[self.view addSubview:stickerBrowserViewController.view]; 

을 수행 루트 뷰의 서브 뷰,하지만 내가 가진 유일한 것은이라고하고 이후의 전망을했다 나는 어쩌면이 생각에 dataresource의 일부 후크의 부족 빨간 내용

합니다 (MSStickerBrowserViewController의보기를 기소 rootview에 추가 된 않았다)하지만 내 이미지 중 어느 것도 스티커

으로 표시되지 않았다 MSStickerBrowserViewController,하지만 대리인을 찾을 수 없거나 자원 속성을 연결합니다.

는 또한 빠른 코드로 그렇게 할 몇 가지 override 물건이 있다는 것을 발견,하지만 난 MSStrickerBrowserViewController의 서브 클래스를하고 그렇게하기 위해 서브 클래스에 MSStickerBrowserViewDataSource의 프로토콜을 구현해야합니까?

이 작업을 수행하는 방법, Objective-C 코드를 사용 하시겠습니까?

답변

0

문제는 MSStickerBrowserViewDataSource 프로토콜을 MessagesViewController에 구현 한 다음 MSStickerBrowserViewController이라는 별도 인스턴스를 만드는 것과 관련이 있습니다. 지금까지는 문제가 없지만 데이터 소스를 MSStickerBrowserViewControllerMSStickerBrowserViewDataSource 프로토콜을 구현하는 클래스 (MessagesViewController)로 설정하지 않았습니다.

MSStickerBrowserViewController 클래스는 MSStickerBrowserView 유형의보기가 있으며 stickerBrowserView이라고합니다. 찾고있는 부동산은 dataSource이며 here이라고 설명되어 있습니다. 코드의 맥락에서, 그는 다음과 같습니다 stickerBrowserViewController.stickerBrowserView.dataSource

내가 프레임 워크 엔지니어가 전화 stickerBrowserView 단지 view 등을 결정하지 않았는지 확실히 말할 수있는 stickerBrowserView 데이터 소스가 delegate라고하지만, 아마도 그들이 원했던되지 않는 이유 stickerBrowserView 대 일반 UIView의 기능을 매우 명확하게 구분합니다.

질문에서 언급했듯이 대체 방법은 하위 클래스 MSStickerBrowserViewController이며 해당 하위 클래스에서 데이터 소스 메서드를 구현하는 것입니다. 첫 번째 방법을 사용하면 UIViewController에서 상속받은 두 개의 클래스가 동시에 화면에 표시되는 문제가 발생할 수 있습니다. 할 수는 있지만이 경우에는 필요하지 않을 수도 있습니다.귀하의 특정 상황에서, 나는 MessagesViewController 대신에 두 번째 경로로 가서 서브 클래스 MSStickerBrowserViewController을 추천 할 것입니다.

@interface MessagesViewController()<MSStickerBrowserViewDataSource> 
@property (strong, nonatomic) NSMutableArray *stickerList; 
@end 

MSStickerBrowserViewController *stickerBrowserViewController = [[MSStickerBrowserViewController alloc]initWithStickerSize:MSStickerSizeRegular]; 
stickerBrowserViewController.view.backgroundColor = [UIColor redColor]; 

// Missing Line 
stickerBrowserViewController.stickerBrowserView.dataSource = self; 

[self.view addSubview:stickerBrowserViewController.view];