如何返回零CGFloat?

时间:2012-02-22 20:22:24

标签: ios cocoa-touch

我想将nil返回tableView:heightForFooterInSection:,但这是不允许的。有没有办法将nil作为CGFloat返回?

你为什么要这样做?
我正在测试tableView如何使用标题和视图混合作为sectionFooters。对于一个页脚,我需要使用自定义视图,但对于另一个页脚,我有3或4个句子的文本,我喜欢系统如何设置样式并调整页脚的大小以适应。但是,只要我实现heightForFooterInSectionviewForFooterInSection所需),带标题的页脚就不会自动调整大小以适合给定的文本。我正在努力避免为直文建立自定义视图。

4 个答案:

答案 0 :(得分:6)

原始值没有nil这样的东西。您可以尝试返回0.0f,但我不知道UITableView如何响应。它可能只是完全隐藏视图。假设您想要为一个页脚返回自定义视图,则需要返回所有页脚的自定义视图。

答案 1 :(得分:3)

正如其他人所提到的那样,浮动没有nil这样的东西。

然而,Ugly Hacks部门为您带来:NaN - “NaN”是浮点位模式的特殊保留值,表示“非数字”。

不知道UITableView会对NaN做什么,但在其他情况下,它可以指定float变量没有值。

如果你不告诉任何人你有什么想法,这里是代码:

CGFloat myNan = nanf(NULL);

答案 2 :(得分:2)

简答:不。

长答案:'nil'是指向任何内容的指针,用于代替指向对象的指针。 CGFloat是一种标量数据类型,而不是Objective-C类,通常不与指针一起使用(或者它将是CGFloat *)。

答案 3 :(得分:0)

我迟到了,但这可能对某人有用。

像其他人说的那样,你不能将nil返回给基元,但是你可以做两件事之一,以区分非设定值和设定值。

  1. 使用NSNotFound

    - (CGFloat)calculateHeight {
       // calculate height...
    
       if (heightInvalid) return NSNotFound;
       else return validFloatValue;
    
    }
    
  2. NSNotFound是由Apple定义的巨大数字,并且在某些操作中被他们使用。然后你可以检查一下,如:

    if ([self calculateHeight] == NSNotFound) ... 
    
    1. 使用NSNumber
    2. 而不是返回CGFloat使您的函数返回NSNumber

            - (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];
      

      我希望有所帮助。