2012-02-22 6 views
2

niltableView:heightForFooterInSection: (으)로 보내고 싶습니다.하지만 허용되지 않습니다. nil을 CGFloat로 반환하는 방법이 있습니까?CGFloat를 반환하는 방법은 무엇입니까?

왜이 작업을 수행하고 있습니까?
나는 어떻게 tableView가 sectionFooters와 같이 제목과 뷰를 혼합하여 동작하는지 테스트하고 있습니다. 한 바닥 글의 경우 사용자 지정보기를 사용해야하지만 다른 바닥 글의 경우 텍스트가 3 ~ 4 문장이므로 시스템에서 스타일을 지정하고 바닥 글의 크기를 조정하는 방식을 좋아합니다. 그러나 heightForFooterInSection (즉, viewForFooterInSection이 필요함)을 구현하자마자 제목이있는 꼬리말은 주어진 텍스트에 맞게 자동으로 크기가 조정되지 않습니다. 직선 텍스트에 대한 사용자 지정보기를 작성하지 않으려 고합니다.

답변

5

프리미티브 값에 대해서는 nil과 같은 것이 없습니다. 0.0f을 반환하려고 할 수도 있지만 UITableView가 어떻게 응답하는지 알지 못합니다. 보기를 완전히 숨길 수 있습니다. 아마도 한 바닥 글에 대한 사용자 정의보기를 반환하려는 경우 모든 바닥 글에 대한 사용자 지정보기를 반환해야합니다.

+0

네 말이 맞아. '0.0f'는'0'을 리턴하는 것과 같은 결과를 가지며,이 경우 시스템은 최소한의 '매력적인'꼬리말 높이를 선택하게됩니다. 그래서 우리가 발견 한 것은 당신이 바닥 글 (그리고 헤더)을 위해 제목과 뷰를 혼합하고 일치시킬 수 있지만, 그것들 모두에 대한 높이를 수동으로 설정해야한다는 것입니다. 그래서 쉬운 방법은 모든 주어진 텍스트를 보여주는 높이를 찾아서 돌려주는 것입니다. – Andrew

2

짧은 대답 : 아니오.

긴 대답 : 'nil'은 객체에 대한 포인터 대신 사용되는 아무 것도 가리키는 포인터가 아닙니다. CGFloat는 Objective-C 클래스가 아닌 스칼라 데이터 유형이며 일반적으로 포인터와 함께 사용되지 않습니다 (또는 CGFloat *).

3

다른 사람들이 언급했듯이 float에는 nil과 같은 것이 없습니다.

그러나 Ugly Hacks 부서에서는 다음을 제공합니다. NaN - "NaN"은 "Not a Number"를 나타내는 float 비트 패턴의 특수 예약 된 값입니다.

UITableView가 NaN을 만드는 것에 대한 단서는 없지만 다른 상황에서는 float 변수에 값이 없음을 지정하는 방법이 될 수 있습니다. 당신이 생각이있어 어디 아무에게도 말하지하지 않을 경우

, 여기에 코드입니다 :

CGFloat myNan = nanf(NULL); 
+1

'nan-wisdown'에 감사드립니다. 그것은 당신이'heightForFooterInSection'에서 리턴 한 것이 중요하지 않다는 것을 결정하는데 도움을주었습니다. 시스템은 당신이 컨트롤을 원한다고 가정하고, 자신의 높이를 계산하지 않을 것입니다. – Andrew

+0

'NaN'은 (''Inf''와'-Inf' 그리고'-0'과 함께) 다소 특별한 값입니다 만, 대부분의 코드는'-0'와'0'을 구별하지 않습니다. UIView 나 CoreAnimation 코드가'NaN'을 만났을 때 불면 놀라지 않을 것입니다. –

0

나는 파티에 늦게 생각하지만이 사람에게 유용 할 수 있습니다.

다른 말처럼, 프리미티브로 nil을 반환 할 수는 없지만 설정되지 않은 값과 설정된 값을 구별하기 위해 두 가지 중 하나를 수행 할 수 있습니다.

  1. 사용 NSNotFound

    - (CGFloat)calculateHeight { 
        // calculate height... 
    
        if (heightInvalid) return NSNotFound; 
        else return validFloatValue; 
    
    } 
    

NSNotFound는 엄청난 수의 애플에 의해 정의 된 일부 조작에 그들에 의해 사용됩니다. 그런 다음 같은 것을 확인할 수 있습니다 :

if ([self calculateHeight] == NSNotFound) ... 
대신 CGFloat이 함수는 NSNumber을 반환하게 반환하는
  • 사용 NSNumber
    1. 을.

       - (NSNumber *)calculateHeight { 
           // calculate height... 
      
           if (heightInvalid) return nil; 
           else return @(validFloatValue); 
      
           } 
      

      그런 다음 nil을 반환 할 수 있습니다.

      은 값을받을 때 당신이 할 :

      NSNumber *myHeightNumber = [self calculateHeight]; 
      if (!myHeightNumber) NSLog(@"height is invalid... do something"); 
      else myHeight = [myHeightNumber floatValue]; 
      

      그게 도움이되기를 바랍니다.

    관련 문제