2013-09-27 4 views
0

을 jQuery과.호출 여러 뷰 컨트롤러 내가이 같은 두 개의 프로토콜 뭔가를 사용하고

은 세 가지 클래스 ContactsViewController, EventViewController, ImageSettingViewController .These 클래스가 ModalClosedProtocol을 구현하기 위해 SettingViewController 클래스에서 syncmlClient이 세 클래스를 protocol.all 기대한다 ModalclosedProtocol 사용하고 있습니다 및 syncmlClient protocol.It은 현재 구현의 짧은 개요입니다. 에서
SettingViewController 나는이 같은 .. didSelectRow에서 호출되는 별도의 방법을 만든 테이블 대리자 메서드를 didSelectRow .FOR 코드 인수를 처리하고있다 : 당신이 볼 경우 기본적으로

-(void) checkDeviceAndHandleModelSizeForFlip:(FlipsideViewController *)flipVc orContact:(ContactsViewController *)contactVc orEvent:(EventViewController *)eventVc orImage:(ImageSettingViewController *)imageSettingVc 
{ 
    UIViewController *genericVC; 
    if (flipVc!=nil) 
    { 
     genericVC = flipVc; 
     flipVc.modalClosedProtocolDelegate = self; 
     flipVc.syncmlClient = self.syncmlClient; 

    } 
    else if (contactVc!=nil) 
    { 
     genericVC = contactVc; 
     contactVc.modalClosedProtocolDelegate = self; 
     contactVc.syncmlClient = self.syncmlClient; 
     contactVc.mainViewController = self.mainViewController; 
    } 
    else if (eventVc!=nil) 
    { 
     genericVC = eventVc; 
     eventVc.modalClosedProtocolDelegate = self; 
     eventVc.syncmlClient = self.syncmlClient; 
     eventVc.mainViewController = self.mainViewController; 
    } 
    else if (imageSettingVc!=nil) 
    { 
     genericVC = imageSettingVc; 
     imageSettingVc.modalClosedProtocolDelegate = self; 
     imageSettingVc.syncmlClient = self.syncmlClient; 
     imageSettingVc.mainViewController = self.mainViewController; 

    } 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    { 
     genericVC.modalPresentationStyle = UIModalPresentationFormSheet; 
     [self presentViewController:genericVC animated:YES completion:nil]; 
     genericVC.view.superview.frame = CGRectInset(genericVC.view.superview.frame, 100, 50); 
    } 
    else 
    { 
     genericVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     [self presentViewController:genericVC animated:YES completion:nil]; //alok 

    } 
} 

redudancy의 많은 코드가 if/else 절에. 하나의 UIViewController 객체가 있다면 코드 관리 관점에서 보면 더 좋을 것입니다.

genericVC = contactVc;//vc object passed from didSelectrow it may be contact/event/image 
    genericVC.modalClosedProtocolDelegate = self; 
    genericVC.syncmlClient = self.syncmlClient; 
    genericVC.mainViewController = self.mainViewController; 

이 문제와 관련하여 도움을받을 수있는 사람이 있습니까?
감사

답변

1

그냥이처럼 genericVC를 선언

UIViewController<ModalClosedProtocol, syncmlClient> *genericVC; 

컴파일러를하자이 방법은 genericVC보기 컨트롤러는 프로토콜 ModalClosedProtocol 및 syncmlClient을 준수 함을 알고, 그래서 방법은 당신이 원하는 전화가 왔어.

+0

친애하는 지금 당장 나를 확인하자 .. :) 감사합니다 – Alok

+0

당신이 맞아요 그러나 전달 인자도 그렇지 않으면 당신은 비 호환성 viewcontrooler 에로를 얻을 것이다 같은 선언해야합니다 – Alok

+0

난 그냥 this.--(void) checkDeviceAndHandleModelSizeForFlip : (FlipsideViewController *) flipVc 또는 연락처 : – Alok

1
[self checkDeviceAndHandleModelSizeForFlip:self.flipVc];//Pass contactVc, eventVc, imageSettingVc like that, 

-(void) checkDeviceAndHandleModelSizeForFlip:(ViewController *)viewController 
{ 
    UIViewController *genericVC; 
    if (viewController!=nil) 
    { 
     genericVC = viewController; 
     viewController.modalClosedProtocolDelegate = self; 
     viewController.syncmlClient = self.syncmlClient; 
     viewController.mainViewController = self.mainViewController; 

    } 
} 
+0

고마워, 그게 내가 먼저 treid있어 오류가있어 : 'modalClosedProtocolDelegate' 'UIViewController *'유형의 객체에서 찾을 수 없습니다 – Alok

+0

또는 viewcontroller 대신 "id"유형으로 전달하십시오. – karthika

+0

'modalClosedProtocolDelegate'속성이 '__strong id'유형의 객체에 없습니다. – Alok