我有一个常用的List-Detail应用程序。 TableView用于显示项目索引和详细信息ViewController显示单个项目以及更多详细信息。
List:
+-----------------+
| |
| IMAGE 1 |
| |
+-----------------+
|button1 button2 |
|=================|
| |
| IMAGE 2 |
| |
+-----------------+
|button1 button2 |
|=================|
| . |
| . |
| . |
Detail:
+-----------------+
| |
| IMAGE 1 |
| |
+-----------------+
| some text |
+-----------------+
|button1 button2 | <= same actions/handlers as in list
|=================|
两者都有一个带有多个按钮的按钮栏(如,保存等)。如何重用这个按钮栏的逻辑?
答案 0 :(得分:1)
您可能希望将这些函数(保存等)添加到包含数据的类(图像,文本等)中。然后,您可以从任何地方调用该函数,它也会执行相同的操作。例如:
class Post {
var image: UIImage?
var text: String?
func save() {
// Put your code here to save the 'Post'
}
func like() {
// Put your code here to like the 'Post'
}
}
对于您的自定义UIView
和UITableViewCell
,您可以使用protocol
和extension
执行类似操作。例如:
protocol UpdateState {
var myImageView: UIImageView? { get }
var myTextLabel: UILabel? { get }
func save()
func like()
}
extension UpdateState {
func save() {
// Put your code here to save the 'Post'
myTextLabel?.text = "New text after save"
myImageView?.image = UIImage(named: "SavedImage")
}
func like() {
// Put your code here to like the 'Post'
myTextLabel?.text = "New text after like"
myImageView?.image = UIImage(named: "NewImage")
}
}
class Cell: UITableViewCell, UpdateState {
@IBOutlet weak var myImageView: UIImageView?
// This is here to conform to the UpdateState protocol
var myTextLabel: UILabel? = nil
}
class View: UIView, UpdateState {
@IBOutlet weak var myImageView: UIImageView?
@IBOutlet weak var myTextLabel: UILabel?
}
答案 1 :(得分:0)
创建一个单独的按钮栏组件,在其中设置数据源,如果您确定在特定索引处要显示特定数量的按钮,那么将字典作为数据源,键将是索引,值将是另一个存储按钮标题的字典。您可以读取数据源并以编程方式在单独的按钮栏组件中创建按钮