You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将自定义Push Row迁移至Eureka 4.1的技术求助

Eureka 3.x → 4.1 自定义Push Row迁移指南(附原生替代方案)

我刚帮好几个开发者搞定过Eureka版本迁移的坑,你的场景太有代表性了!先给你拆解两个核心问题,顺便告诉你:其实不用自定义Row就能实现你要的多行标签+自定义选择器头部,先从这个省心的方案说起~

一、优先用原生能力替代自定义Row(零迁移成本)

Eureka 4.1的原生PushRow已经支持你要的所有功能,完全不用自己造轮子:

1. 实现标签多行显示

通过customCellSetup闭包直接配置cell的文本属性,一行代码搞定多行:

PushRow<String>("multiLineDemo") { row in
    row.title = "这是一个超长的测试标题,需要自动换行显示,测试测试测试测试测试测试测试测试"
    row.options = ["选项A", "选项B", "选项C"]
}
.customCellSetup { cell, _ in
    // 开启多行+自动换行
    cell.textLabel?.numberOfLines = 0
    cell.textLabel?.lineBreakMode = .byWordWrapping
}

记得给所在的tableView设置rowHeight = UITableView.automaticDimension和estimatedRowHeight = 60,让cell高度自适应。

2. 自定义选择器VC的分区头部

利用onPresent闭包直接修改跳转后的选择器视图控制器,不管是自定义UIView还是用Eureka自带的HeaderFooterView都可以:

// 方式1:用自定义UIView做头部
.onPresent { _, selectorVC in
    let customHeader = UIView(frame: CGRect(x: 0, y: 0, width: selectorVC.view.frame.width, height: 60))
    customHeader.backgroundColor = .systemGray5
    let titleLabel = UILabel(frame: customHeader.bounds)
    titleLabel.text = "我的自定义头部"
    titleLabel.textAlignment = .center
    customHeader.addSubview(titleLabel)
    selectorVC.tableView.tableHeaderView = customHeader
}

// 方式2:用Eureka原生HeaderFooterView(更贴合Eureka风格)
.onPresent { _, selectorVC in
    selectorVC.form.sections.first?.header = HeaderFooterView(title: "原生风格自定义头部") { header in
        header.textLabel?.textColor = .systemBlue
        header.textLabel?.font = .boldSystemFont(ofSize: 16)
    }
}

二、如果必须保留自定义Push Row的迁移步骤

要是你因为历史代码原因必须保留自定义Row,Eureka 4.1的API变化不大,重点调整这几点:

1. 自定义Row的继承与配置

Eureka 4.x的Row结构基本延续3.x,但推荐用customCellSetup替代重写cellSetup(当然重写也可以):

final class MultiLinePushRow<T: Equatable>: PushRow<T> {
    override func customCellSetup(_ cell: UITableViewCell, row: Row) {
        super.customCellSetup(cell, row: row)
        // 开启多行显示
        cell.textLabel?.numberOfLines = 0
        cell.textLabel?.lineBreakMode = .byWordWrapping
        // 触发自适应布局
        cell.setNeedsLayout()
        cell.layoutIfNeeded()
    }
}

使用方式和原生PushRow完全一致,直接初始化即可。

2. 跳转逻辑的适配

Eureka 4.x弱化了segue的直接使用,推荐用onPresent或onSelect闭包处理跳转后的VC配置,和原生方案的头部配置逻辑完全一样,直接复用就行。

三、自定义选择器视图控制器的适配

如果你的选择器VC是完全自定义的(不是Eureka默认的PushSelectorViewController),Eureka 4.x支持直接替换跳转的VC:

// 替换为自定义选择器VC
MultiLinePushRow<String>("customSelector") { row in
    row.title = "自定义选择器测试"
    // 指定自定义VC
    row.presentationMode = .presentModally(controllerProvider: .callback {
        let yourVC = YourCustomSelectorViewController()
        // 配置你的VC逻辑,比如传递选项、设置回调
        yourVC.options = ["自定义选项1", "自定义选项2"]
        yourVC.onSelect = { selectedValue in
            row.value = selectedValue
            row.updateCell()
        }
        return yourVC
    })
}

只要确保你的自定义VC实现选择后的回调逻辑,更新Row的value即可。


内容的提问来源于stack exchange,提问作者Rod Schmidt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:33:10