2014-10-09 2 views
1

나는 LoginViewController라는 ViewController를 가지고 있으며, 두 개의 텍스트 필드와 버튼을 가지고있다.autolayout보기 컨트롤러 상속

모든 요소는 자동 레이아웃 (프로그래밍 방식으로 작성된 규칙)과 잘 작동합니다.이 경우 요소는 수퍼 뷰가있는 X의 가운데에 배치됩니다.

이제 LeftLoginViewController라고하는 LoginViewController에서 hesitance하는 UIViewController를 만들고 싶습니다. 이 LeftLoginViewController는 LoginViewController와 동일한 기능을 갖지만 모양이 변경되어 수퍼 뷰의 왼쪽에있는 모든 요소를 ​​유지해야합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까 (이 leftLoginViewController 내 질문에 내가 아버지의 관점에서 시각적 요소를 이동하려는 상황을 관리하는 방법에 초점을 맞추고, 예입니다)? 자동 레이아웃 규칙을 수정하려면? 왜냐하면 분명히 프레임을 수정할 수 없기 때문입니다.

parentViewController의 기본보기에 추가 된 각 규칙에 대한 속성을 만들어야합니까? LeftLoginViewController는 상수를 수정할 수 있습니까? 예를 들어 NSLayoutAttributeCenterX와 같은 규칙 중 하나를 NSLayoutAttributeTrailing로 변경하려면 해당 속성은 읽기 전용입니다.

죄송 합니다만, 저는 이것에 대해 매우 혼란 스럽습니다. 나는 올바른 방향을 얻기 위해 몇 가지 아이디어가 필요합니다.

답변

0

LeftLoginViewController의 유일한 차이점이 레이아웃 인 경우 하위 클래스가 필요하지 않습니다. 유형이있는보기 컨트롤러를 초기화 할 수 있습니다.

당신이 목표 - C 사용하는 가정 :

ViewController.h을

typedef NS_ENUM(NSUInteger, LayoutType) { 
    LayoutTypeNormal, 
    LayoutTypeLeft 
}; 

@interface ViewController : UIViewController 

- (id)initWithLayoutType:(LayoutType)layoutType; 

@end 

ViewController.m

@interface ViewController() 

@property (nonatomic) LayoutType layoutType; 

@end 

@implementation ViewController 

- (id)initWithLayoutType:(LayoutType)layoutType 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.layoutType = layoutType; 
    } 

    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (self.layoutType == LayoutTypeNormal) 
    { 
     // centre layout for normal 
    } 
    else if (self.layoutType == LayoutTypeLeft) 
    { 
     // left layout 
    } 
} 
+0

음, 왼쪽으로 예를 모든 요소를 ​​한 이동, I 아버지 뷰 컨트롤러에서 요소를 옮기는 방법을 설명했다. – xarly

관련 문제