How to do custom font and color in UITableViewRowAction without Storyboard

前端 未结 9 1687
失恋的感觉
失恋的感觉 2020-12-30 08:09

I have classic TableView where you can delete item if you swipe and than clicking on the button. I know how to set custom background on the cell, but I can\'t find how I can

相关标签:
9条回答
  • 2020-12-30 09:02

    Well, the only way I've found to set a custom font is to use the appearanceWhenContainedIn method of the UIAppearance protocol. This method isn't yet available in Swift, so you have to do it in Objective-C.

    I made a class method in a utility Objective-C class to set it up:

    + (void)setUpDeleteRowActionStyleForUserCell {
    
        UIFont *font = [UIFont fontWithName:@"AvenirNext-Regular" size:19];
    
        NSDictionary *attributes = @{NSFontAttributeName: font,
                          NSForegroundColorAttributeName: [UIColor whiteColor]};
    
        NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString: @"DELETE"
                                                                              attributes: attributes];
    
        /*
         * We include UIView in the containment hierarchy because there is another button in UserCell that is a direct descendant of UserCell that we don't want this to affect.
         */
        [[UIButton appearanceWhenContainedIn:[UIView class], [UserCell class], nil] setAttributedTitle: attributedTitle
                                                                                              forState: UIControlStateNormal];
    }
    

    This works, but it's definitely not ideal. If you don't include UIView in the containment hierarchy, then it ends up affecting the disclosure indicator as well (I didn't even realize the disclosure indicator was a UIButton subclass). Also, if you have a UIButton in your cell that is inside a subview in the cell, then that button will get affected by this solution as well.

    Considering the complications, it might be better to just use one of the more customizable open source libraries out there for table cell swipe options.

    0 讨论(0)
  • 2020-12-30 09:07
    //The following code is in Swift3.1
        func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
        {
            let rejectAction = TableViewRowAction(style: UITableViewRowActionStyle.default, title: "\u{2715}\nReject") { action, indexPath in
                    print("didtapReject")
                }
                rejectAction.backgroundColor = UIColor.gray
                let approveAction = TableViewRowAction(style: UITableViewRowActionStyle.default, title: "\u{2713}\nApprove") { action, indexPath in
                    print("didtapApprove")
                }
                approveAction.backgroundColor = UIColor.orange
                return [rejectAction, approveAction]
           }
    
    0 讨论(0)
  • 2020-12-30 09:08

    This seems to work, at least for setting the font color:

    - (void)setupRowActionStyleForTableViewSwipes {
        UIButton *appearanceButton = [UIButton appearanceWhenContainedInInstancesOfClasses:@[[NSClassFromString(@"UITableViewCellDeleteConfirmationView") class]]];
        [appearanceButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
    }
    
    0 讨论(0)
提交回复
热议问题