2011-08-23 3 views
0

저는 iPhone 개발에 익숙하며 컨트롤러에 이러한 항목을 새로 고치라는 알림을 표시 한 후 하위보기가 표시되지 않습니다.이미 표시된보기에서 하위보기가 표시되지 않습니다.

그래서, 맨 아래에 뉴스 피드의 마지막 항목 3 개를 보여주는 내 메인 페이지입니다. 뷰 컨트롤은 (NSArray에서) 뉴스 피드의로드를 처리합니다. 페이지를로드 할 때 뉴스 피드가 기본보기의 하위보기로 올바르게 표시됩니다. 그러나보기가 이미 존재하는 경우 (예 : 처음 로그인 한 직후) 뉴스 피드가 표시되거나 새로 고쳐지지 않습니다. 인터넷에서 비동기 적으로 가져온 아바타 이미지가 올바르게 표시됩니다. 그러나 레이블은 아닙니다.

디버그 코드가 제대로 실행되고 있음을 보여줍니다 ...하지만 아무 일도 일어나지 않습니다 ...

여기에 알림을 처리하고 새로 고침 코드입니다.

나는 바보 같은 것을 놓치지 만 내 손가락을 넣을 수는 없다고 확신합니다. 하위 뷰의 UILabel 또는 UIImage가 리프레시 할 요소를 피할 수 있습니까?

도움 주셔서 감사합니다.

controler를 코드

-(void) handleRefreshNewsfeed:(NSNotification*)notification{ 

if (self.newsfeedMostRecentDate == nil){ 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyyMMdd HH:mm"]; 
    self.newsfeedMostRecentDate = [dateFormatter dateFromString:@"20100101 00:00"]; 
    [dateFormatter release]; 
} 
NSArray * newsfeed = [cdw getNewsfeedForUser:self.currentUser andLimit:self.newsfeedLimit]; 
if ([newsfeed count] > 0){ 
    self.newsfeedMostRecentDate = [(Newsfeed *)[newsfeed objectAtIndex:0] posted]; 
    if ([self.view isKindOfClass:[MenuView class]]){ 
     [(MenuView *)self.view refreshNewsfeed:newsfeed]; 
    } 
} 

}

주요보기 선언 :

@interface MenuView : UIView { 
MenuNewsfeed    * newsFeedView; 
} 
@property(nonatomic, retain) IBOutlet MenuNewsfeed *newsFeedView; 

-(void)displayNewsfeed:(NSArray *)newsfeed; 
-(void)refreshNewsfeed:(NSArray *)newsfeed; 

주요 뷰 코드 :

-(void)displayNewsfeed:(NSArray *)newsfeed{ 
[self.newsFeedView setCurrentUser:currentUser]; 
[self.newsFeedView displayNewsfeed:newsfeed]; 

[UIView animateWithDuration:0.75f 
    delay: 0.0 
     options: UIViewAnimationOptionCurveEaseIn 
    animations:^{ 
     self.newsFeedView.alpha = 1.0; 
    } 
    completion:^(BOOL finished){ 
     //nothing 
    } 
]; 
} 

-(void)refreshNewsfeed:(NSArray *)newsfeed{ 

if ([self.newsFeedView.newsfeed count] > 0){ 
    [UIView animateWithDuration:0.50f 
     delay: 0.0 
      options: UIViewAnimationOptionCurveEaseIn 
     animations:^{ 
      self.newsFeedView.alpha = 0.0; 
     } 
     completion:^(BOOL finished){ 
      // [self displayNewsfeed:newsfeed]; 
     } 
    ]; 
}else { 

    [self displayNewsfeed:newsfeed]; 
} 
} 

마이클

답변

0

문제가 발생하지 않을 수도 있습니다.

그러나 내가 볼 수있는 작은 결함이 있습니다. CGRectMake (50, 100, 55, 12)는 12px 와트이지만 55px 높이의 rect를 생성합니다.

적어도 곤충이 보이지 않아 텍스트의 "te"또는 "tes"가 표시되어야합니다. 어떤 곤충 값 (10 정도)으로 인해 텍스트 문자열에주의를 기울일 수 있습니다.

또는 아니오. 텍스트가 잘리는 경우, 기본 줄 바꿈 모드에 따라 특정 길이로 잘리고 일부 끝에 "..."가 추가 될 수 있습니다. "테스트 테스트 테스트"대신에 몇 가지 포인트 만 볼 수 있습니까?

그렇지 않으면보기의 스택 맨 위에 있어야하지만 다른보기에서 tmp 레이블이 숨겨져 있는지 확인하십시오.

그러나 추가 테스트를 수행하기 전에 실제로 저장하려면 20, 100 정도의 사실적인 사각형을 저장하십시오.

+0

힌트를 보내 주셔서 감사합니다!나는 당신의 제안을 시도해 보았고, 검은 배경도 추가했다. 그러나 그것은 여전히 ​​보이지 않는다. 나의 이해가 정확하다면, addSubview 메소드는 다른 모든 것들 위에 sbview를 추가한다. 그래서 나는 조금 잃어버린 ... –

+0

음, 그래. 하위 뷰 레이어 위에 추가됩니다. 다른 항목이 보이나요? 다른보기 유형을 추가하려고 했습니까? self.view가 제대로 생성 되었습니까? 또는 어떤 이유로 싫은가요? –

+0

나는 모든 것을 잘 선언했다 ... 나는 코드를 넣기 위해 나의 포스트를 편집 할 것이다. –

0

문제점을 알았습니다. 통지를 처리하는 코드 (및 UI 수정)가 주 스레드에서 처리되지 않았습니다.

[self performSelectorOnMainThread:@selector(refreshNewsfeed) withObject:notification.object waitUntilDone:NO]; 

performSelectorOnMainThread를 통해 새로 고침 메서드를 호출하면 문제가 해결되었습니다.

관련 문제