Reputation: 8563
I'd like to return nil
to tableView:heightForFooterInSection:
but that's not allowed. Is there a way to return nil
as a CGFloat?
Why are you doing this?
I'm testing how a tableView will behave with a mix of Titles and Views as sectionFooters. For one footer I need to use a custom view, but for another footer I have 3 or 4 sentences of text and I like how the system styles it and sizes the footer to fit. But as soon as I implement heightForFooterInSection
(which is required by viewForFooterInSection
), the footer with the title no longer auto-resizes to fit the given text. I'm trying to avoid building a custom view for the straight text.
Upvotes: 5
Views: 5441
Reputation: 35963
I am late for the party but this may be useful to someone.
Like others said, you cannot return nil to primitives but you can do one of two things, to differentiate a non-set value from a set one.
Use NSNotFound
- (CGFloat)calculateHeight {
// calculate height...
if (heightInvalid) return NSNotFound;
else return validFloatValue;
}
NSNotFound is a huge number defined by Apple and used by them on some operations. Then you can check for that, like:
if ([self calculateHeight] == NSNotFound) ...
NSNumber
Instead of returning a CGFloat
make your function return a NSNumber
.
- (NSNumber *)calculateHeight {
// calculate height...
if (heightInvalid) return nil;
else return @(validFloatValue);
}
Then, you can return nil.
When receiving the value you do:
NSNumber *myHeightNumber = [self calculateHeight];
if (!myHeightNumber) NSLog(@"height is invalid... do something");
else myHeight = [myHeightNumber floatValue];
I hope that helps.
Upvotes: 1
Reputation: 18253
As mentioned by others, there is no such thing as a nil
for floats.
However, the Department of Ugly Hacks brings you: The NaN - "NaN" being a special reserved value of the float bit pattern representing "Not a Number".
No clue what a UITableView will make of a NaN, but in other situations it can be a way to specify that a float
variable does not have a value.
If you won't tell anyone where you got the idea, here is the code:
CGFloat myNan = nanf(NULL);
Upvotes: 3
Reputation: 751
Short answer: no.
Long answer: 'nil' is a pointer to nothing, used in place of a pointer to an object. CGFloat is a scalar datatype, not an Objective-C class, and is not generally used with pointers (or it would be CGFloat *).
Upvotes: 2
Reputation: 185691
There's no such thing as nil
for primitive values. You could try returning 0.0f
, but I don't know how UITableView responds to that. It may just hide the view entirely. Presumably if you want to return a custom view for one footer, you need to return a custom view for all footers.
Upvotes: 7