I have a class that swizzles UIButton‘s when the buttonType is UIButtonTypeCustom is true.
However, this is also true when it comes to UITableViewCellAccessoryCheckmark and UITableViewCellAccessoryDisclosure is used as well. What is happening is that for some reason, it is swizzling them and adding the custom background and so forth behind the accessoryType for some reason.
What I need to do is to check whether or not the UIButton that I’m trying to swizzle is a UITableViewCellAccessoryType but I am unaware of how to do such a thing.
Here’s the innards of the function that I am using to swizzle the UIButton.
if ([self isMemberOfClass:[UIButton class]] && self.buttonType == UIButtonTypeCustom) {
UIImage *upImage = [theme rectButtonUp], *downImage = [theme rectButtonDown];
UIColor *upColor = [theme rectButtonUpTextColor], *downColor = [theme rectButtonDownTextColor];
/* If the highlighted title is set to _theme_asdf, look for a custom
* button image called "asdf" and use that. Clear out this highlighted
* title string. */
NSString *hlTitle = [self titleForState:UIControlStateHighlighted];
if ([hlTitle isEqualToString:@"_theme_add"] || [hlTitle isEqualToString:@"Add"]) {
upImage = [theme rectButtonUpAdd];
downImage = [theme rectButtonDownAdd];
} else if ([hlTitle isEqualToString:@"_theme_remove"]) {
upImage = [theme rectButtonUpRemove];
downImage = [theme rectButtonDownRemove];
} else {
upImage = [theme rectButtonUp];
downImage = [theme rectButtonDown];
}
[self setTitle:nil forState:UIControlStateHighlighted];
upColor = [theme rectButtonUpTextColor];
downColor = [theme rectButtonDownTextColor];
[self setBackgroundImage:upImage forState:UIControlStateNormal];
[self setBackgroundImage:downImage forState:UIControlStateHighlighted];
[self setBackgroundImage:downImage forState:UIControlStateSelected];
if (upColor) {
[self setTitleColor:upColor forState:UIControlStateNormal];
[self setTitleColor:[upColor colorByLighteningTo:0.5f] forState:UIControlStateDisabled];
}
if (downColor) {
[self setTitleColor:downColor forState:UIControlStateHighlighted];
[self setTitleColor:downColor forState:UIControlStateSelected];
}
}
Any help would be greatly appreciated!
A quick fix that I have done that accomplishes what I wanted to achieve.
Code:
if ([self isMemberOfClass:[UIButton class]] && self.buttonType == UIButtonTypeCustom) {
So, basically, all of the
UIButtonshave atitleLabelwithtextbut theUITableViewCellAccessoryType‘s don’t. Therefore, we have success. It may be a hack but for now it has aided me in completing what I need.