2013-01-29 2 views
6

따르면 docs :iOS 6 UIWebView 상태 복원은 어떻게 작동합니까?

아이폰 OS 6에서

당신이보기의 restorationIdentifier 속성에 값을 할당하면 나중에, 그것은 각 페이지에 해당 URL의 역사, 스케일링 및 스크롤 위치를 유지하기 위해 시도하고, 정보있는 약 페이지가 현재 검토 중입니다. 복원하는 동안 뷰는 이러한 값을 복원하여 이전과 마찬가지로 웹 컨텐트를 표시합니다.

나는 모든 일을 해요,하지만 아무것도 발생하지 않습니다. 그리고 사용자가 이전에보고 있던 URL을 수동으로 저장하고 복원하더라도 스크롤 위치는 복원되지 않습니다. 문서가 잘못 되었나요?

답변

5

나는 매트의 대답을 시도하며 '앞으로'역사 스택들은 웹 뷰 객체 내에서 복원 요청에 의해 대체됩니다의 페이지가있다 그러나 경우, 잘 작동합니다.

더 나은 방법은 webview 개체에서 'reload'메서드를 호출하는 것입니다.이 방법은 확대/축소 및 내용 스크롤 오프셋뿐만 아니라 양방향으로 기록을 복원합니다.

당신이 당신의 자신의 웹보기에 대한 나의 접근 방식의 예 또는 일부 더 많은 기능을 좋아 SVWebViewController here.

+1

내 대답보다 낫다. – matt

+0

누구나 무슨 일이 일어나고 있는지 그리고 코드가 어디에 표시되는지 이해하려면 Matt의 대답을 읽어야합니다. 그의 "loadRequest"호출을 "reload"로 바꿉니다. – jasonjwwilliams

11

워드 프로세서 바로,하지만 매우 불완전하다. 여기에 무슨 일이 일어나고 있는지. 웹 뷰 상태 복원에 참여하는 경우 (난 당신이 무엇을 의미하는지 알고 있으리라 믿고있어 - 모든 등등 restorationIdentifier을 가지고 있고,), 웹보기 (아닌 HTML 문자열을) 요청이 있다면 사용자가를 떠날 때 앱을 사용하면 웹보기는 자동으로 request 속성과 동일한 요청을 포함하는 수명으로 돌아가며 뒤로 및 앞으로 목록이 그대로 유지됩니다. 따라서 상태 복원 메커니즘을 사용하여 웹보기의 상태를 복원 할 수 있지만 약간의 추가 춤을 수행해야합니다. 이 춤은 너무 호기심이 많고 애매한 데, 처음에는 웹 뷰의 상태를 문서화가 가능하다는 주장에도 불구하고 실제로 저장하고 복원 할 수 없다는 인상하에있었습니다.

여기에 두 가지 비밀이있다; 일단 웹 사이트 상태를 확인하면 웹보기 상태 복원을 이해하게됩니다.

  • 복원 된 웹보기는 요청을 자동으로로드하지 않습니다. 그것은 당신의 코드에 달려 있습니다. 복원 된 웹 뷰는 요청을로드 한 후

  • 는 그 위로리스트의 첫 번째 항목은 사용자가 좌측 상태에서 동일한 페이지 (스크롤 및 확대)이다.

웹 뷰 상태 복구 전략을 쉽게 수립 할 수 있습니다. 우선 우리가 상태를 복원하는 것을 감지하고, 그 그렇게 말한다 플래그를 인상하는 것입니다 : 우리가 상태를 복원하는

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder { 
    [super decodeRestorableStateWithCoder:coder]; 
    self->_didDecode = YES; 
} 

이제 우리는 (아마도 viewDidAppear:에서) 감지 할 수 있으며, 웹보기 마술을 포함 요청을로드하고 해당 요청을로드하십시오.

if (self->_didDecode && wv.request) 
    [wv loadRequest:wv.request]; 

이제 까다로운 부분이 있습니다. 뷰가로드 된 후 즉시 "돌아갑니다." 이것은 실제로 사용자의 이전 스크롤 위치를 복원하고 Back 스택의 맨 위에서 추가 항목을 제거하는 효과가 있습니다.

- (void)webViewDidFinishLoad:(UIWebView *)wv { 
    if (self->_didDecode && wv.canGoBack) 
     [wv goBack]; 
    self->_didDecode = NO; 
} 

있는 UIWebView는 사용자가 이전에 응용 프로그램을 왼쪽 때의 상태에 지금을 : 우리는 다른 시간에 이러한 추가 이동을하지 않도록 우리는 우리의 깃발을 내립니다. 내장 된 iOS 6 상태 저장 및 복원 기능을 사용하여 상태를 저장하고 복원했습니다.

+0

는 웹보기의 특질이 있는지 모르겠어요 내 오픈 소스 분기점에서 살펴 싶다면, 그러나'[wv goBack]'후에,'[wv canGoBack]'을 테스트하면 여전히'YES'를 반복해서 반환합니다. 내역에서 한 페이지 만있는 웹보기에서 사용해 보았습니다 (iOS 6.1.4). –

+1

어디서나이 프로젝트가 작동합니까? 그것을 작동시킬 수 없다 – cannyboy

+0

호기심에서, 복잡하고 당혹스럽고 복잡한 문제에 대해 큰 질문을 던지면 어떻게 신속하게 포괄적 인 자아 - 응답으로 해산시킨다. 의사록? 좋은! 그 트릭을위한 SO 배지는 어디 있습니까? –