2012-09-18 6 views
2

classView에서 MainView (내 UIViewController)를 표시하기 위해 호출하는 classB에서 UIView를 만들고 싶습니다.UIViewController 외부에서 UIView를 만드는 방법은 무엇입니까?

illustration

사람이 내 코드를 해결하기 위해 나를 도와 드릴까요?

를 ClassA :

+ (void)trigger 
{ 
    [classB viewOn:[MainView new]]; 
} 

ClassB가 : 잘 작동 :

+ (void)viewOn:(id)sender 
{ 
    MainView *pointer = (MainView *)sender; 

    classB *view = [[classB alloc] initWithFrame:CGRectMake(380, 200, 100, 50)]; 
    view.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.5f]; 
    view.userInteractionEnabled = YES; 

    UILabel *lab = [UILabel new]; 
    lab.frame = CGRectMake(0, 0, 100, 50); 
    lab.text = @"test"; 

    [view addSubview:lab]; 
    [pointer.view addSubview:view]; 
} 

내가 [자기 ClassB가 viewOn]에 의해 ClassB가 전화를 MAINVIEW 클래스를 사용

. 하지만 classA에서 실행하려고한다면 어떻게해야합니까?

답변

0

위임을 사용하십시오. 아주 간단합니다. 당신이해야 할 일은 ClassA입니다. 는이

@interface ClassA: NSObject <ClassB> 

처럼 보이게하고 지금은 ClassA에서 호출 할 수 있습니다.

내가 희망적으로 새로운 목표 인 것처럼 도왔습니다. c.

1

[classB viewOn : self]로 ClassB를 호출하기 위해 MainView 클래스를 사용할 때 이 정상적으로 작동합니다.

senderMainView *으로 전송했기 때문입니다.

하지만 classA에서 트리거하고 싶다면 어떻게해야합니까? 당신이를 ClassA에서 같은 일을하려면

, 당신이 통과 MAINVIEW의 인스턴스에 대한 포인터가 필요합니다. 나는 당신이하려는 것을 볼 ... 이미

아마 당신의 MAINVIEW를 초기화하는 올바른 방법이 아니다

[classB viewOn:[MainView new]];

는하지만 ... 전망은 일반적으로 initWithFrame: 다음 alloc 초기화됩니다.

이 모든 작업을하기 위해 너무 많은 시간을 소비하기 전에 여기에서 개체가 수행하는 다양한 역할에 대해 생각해야합니다. 일반적으로 뷰 컨트롤러를 사용하여 뷰 계층 구조의 생성 및 구성을 관리합니다. 보기 컨트롤러가 여기에서 유용 할 수있는 한 가지 방법은 MainView의 인스턴스에 대한 참조를 유지하는 것입니다. 그러면보기 컨트롤러가 ClassB를 인스턴스화하고 새보기를 MainView에 추가 할 수 있습니다. ClassA 작업을보기 컨트롤러뿐만 아니라보기로 만들기 위해 노력하고있는 것 같습니다. 아마도 물을 흐리게 처리하고 Objective-C 및 Cocoa Touch에서 효과적으로 작업하는 것을 배우는 것이 더 어려워 질 것입니다.

+0

여기 코드를 처리하는 데 과음 한 것으로 보입니다. 당신 말이 맞습니다. 나는 수업과 역할을하기위한 나의 논리를 정말로 재고해야합니다. 하지만 그들을 고치려고하면 어떻게해야합니까? – Graphite

+0

당신이 원하는 것을 알아내는 것으로 시작하십시오. 객체와 클래스는 잊어 버리십시오. 사용자가 무엇을보고 싶습니까?Apple의 iOS 설명서에서 MVC를 읽고 iOS에서 MVC 패턴을 사용하는 방법을 이해하고 iOS에서 잘 작동하는 방식으로 프로그램을 구성하는 데 도움이되는 iOS에서 LOT를 사용하는 방법을 이해합니다. 나는 당신이 성취하고자하는 것을 정말로 말할 수 없기 때문에 그 이상으로 구체적 일 수는 없습니다. – Caleb

+0

가난한 언어 지식 단계에서 제 코딩 경험이 사실입니다. Objective-C로 아이디어를 구현해보십시오. 프로젝트를 계속하려면 더 많은 독서를해야합니다. 시간과 도움을 주셔서 감사합니다, 정말 고마워요! – Graphite

관련 문제