2014-01-27 2 views
1

iOS 개발을 처음 사용합니다. 보기에 두 개의 단추가있는 매우 간단한 UIViewController가 있습니다. 사용자가 UI 구성 요소를 편집하거나 끌어서 놓기를 허용하고 있습니다. 이제 재설정 기능을 구현하여 사용자가 UI를 원래 단계로 재설정하여 모든 변경 사항을 삭제할 수있게하려고합니다.UIViewController의 루트보기를 원래 상태로 재설정하거나 다시 시작하는 방법은 무엇입니까?

여러 게시물에서 언급했듯이 setNeedsDisplay를 시도했지만 올바른 방법이 아닌 것 같습니다. 내 옵션은 무엇입니까?

Android 세계에서 현재 활동 (UIViewController에 해당)을 완료하고 자신을 다시 시작하여 원래 상태로 만들 수 있습니다. iOS에서 이와 유사한 작업을 수행 할 수 있습니까?

1이 초기 상태의 위치를 ​​저장하고 사용자가 리셋 버튼을 클릭 할 때, 그들의 초기 상태에 그 버튼을 넣어 :

- (IBAction)resetButtonClicked:(id)sender { 
    // Now I want discard all the changes on the screen 
    // On some button click or specific action from user. 

    // Tried calling setNeedsDisplay as pointed in few others answers but somehow 
    // setNeedsDisplay does not reload my ViewController. 
    // [self.view setNeedsDisplay]; 
    } 
+1

왜 안드로이드 태그를 설정 했습니까? –

+0

u 아직도 그 문제가 있습니까? 어떤 대답도 수락하지 않습니까? 우리 한테 무슨 일이 있었는지 알려주시겠습니까? – Omarj

답변

0

나는 두 가지 옵션을 생각할 수 있습니다.

2 - 또는 (이상한 방법으로), 당신은 당신과 같은 컨트롤러를 초기화 할 수 있습니다. 그리고 그것은 단지 그 자신으로부터 선물합니다. 그것은 어떻게 든 당신의 안드로이드 접근에 가깝습니다. (첫 번째 일을 기각하지 않은 경우 당신은해야한다) 당신은 도움이 :)

희망

+0

감사 옵션 1은 확실히 위치에 도움이되지만보기 배경이 변경되거나 일부 텍스트가 편집되면 실패합니다. 따라서 옵션 2를 고려하십시오 – kodeshpa

1

나는 비슷한 짓을 초기 상태에서 동일한 컨트롤러를 얻을 수 있습니다. 내가 한 일은 다음과 같습니다.

1) 컨트롤의 각 프레임 즉 CGRect originalFrame1에 대해 로컬 CGRect 변수를 만듭니다.

2) 각 UI 컨트롤의 원래 프레임 위치를 가져 와서 viewDidLoad에 저장합니다. 즉 originalFrame1 = _frame1.frame;

3) resetButtonClicked에 설정된 원래 위치입니다. _frame1.frame = originalFrame1;

0

주 뷰에서 모든 하위 뷰 (버튼, 레이블, ...)의 위치를 ​​저장할 수 있습니다.

self.view.subview가 반환 배열 u는 그것을 :)

이있는 모든 요소를 ​​포함하고 유 싶어보기를 놓으면 바로 배열에서 각각의 서브 뷰에 대한 기존의 위치를 ​​얻는다.

NSArray *arrayOfView = [view subviews]; 
//also: 
NSMutableArray *mutableArrayOfView = [[view subviews] mutableCopy]; 

for (UIImageView *imageView in imageViewArray) //uiimageview or whatever your subview //is you can check by using isKindofClass. `if ([view isKindOfClass:[UIImageView class]])` 
{ 
    //let's set frame for image view before adding to 
    [myimageView setFrame:imageview.frame];//or something like that 

} 
+0

이것은 재미있을 것입니다, 그것은 확실히 원래 위치로보기를 설정할 것입니다. 그러나 텍스트 나 다른 것이 변경되면 어떻게 될까요? 좀 더 정확히 말하자면, 버려 같은 기능을 구현하고 싶습니다. – kodeshpa

0

모든 응용 프로그램은 표시 할 몇 가지의 ViewController를 할당해야하는 대한 keyWindow 목적이있을 것이다.

window.rootViewController = [[UIViewController alloc] init];

self.window를 쓸 것입니다, 컨트롤러의 클래스가 앱 위임에 따라서

, didFinishLaunchingWithOptions CustomViewController라고 할 수 있습니다.rootViewController = [[CustomViewController alloc] init];

그리고 당신은 위의 코드를 따른다면 다시는 rootViewController를 설정할 때,이 때문에 어떤 메모리 누수가되지 않습니다

-(void)reset{ 
    // reset the view with default 
    self.view.window.rootViewController = [[CustomViewController alloc] init]; 

} 

당신이 버튼을 아래 수 다시 클릭 할 때 호출 기능, 낡은 카드는 잃어버린 채 메모리에서 삭제됩니다.

+0

감사합니다, 그것은 펜촉에서로드되지 않은보기를 위해 작동합니다. 나는 동일한 일을 시도했지만 예외 'NSInternalInconsistencyException', 이유 : '- [UIViewController _loadViewFromNibNamed : bundle :] "ViewController"펜촉을로드했지만보기 콘센트가 설정되지 않았습니다. – kodeshpa

+0

나는 펜촉으로 링크 된 viewController를 시도해 보았고 outlets.It은 완벽하게 작동했다. 코드에 다른 콘센트 문제가있을 수 있습니다. 중단 점을 넣고 디버깅하십시오. – santhu

+0

몇 가지 코드 예제가 있는데 참조 할 수 있습니다. 지금은 아무런 오류가 발생하지 않았지만 지금은 그냥 빈 창이 표시됩니다. – kodeshpa

관련 문제