Tuy nhiên, người sử dụng vẫn chưa thay đổi được giá trị của mỗi tham số trực tiếp trên bảng Attributes Inspector này mà đang sử dụng giá trị mặc định cho từng loại biến (dấu – trong mỗi ơ thuộc tính chỉ ra rằng nó đang sử dụng giá trị mặc định).
86
Muốn có thể sửa trực tiếp trên bảng thuộc tính Attributes Inspector thì mỗi khi giá trị ở đó thay đổi cần cập nhật lại thuộc tính biến tương ứng bên trong RatingControl. Trong iOS để làm được điều đó mỗi thuộc tính cần cập nhật cần được thêm vào một Property
observer. Property observer sẽ được gọi mỗi khi giá trị của một thuộc tính thay đổi. Sửa
lại khai báo của 3 tham số trong RatingControl để thêm vào Property observer có tên
didSet như sau sao cho mỗi khi giá trị của biến thay đổi thì gọi lại hàm setUpButtons
(Nghĩa là thiết lập lại các button cho RatingControl).
@IBInspectable var ratingValue: Int = 0 {
didSet {
setUpButtons() }
}
@IBInspectable private var starSize: CGSize = CGSize(width: 44.0,
height: 44.0) { didSet {
setUpButtons() }
}
@IBInspectable private var starNum: Int = 5 {
didSet {
setUpButtons() }
}
Bài tập: Thực hiện chương trình, thay đổi các tham số trong bảng Attributes Inspector, quan sát kết quả và giải thích! Hãy đưa giải pháp điều chỉnh!
Gợi ý: Cần xoá đi các button cũ trong mảng và trong StackView mỗi khi hàm
setUpButtons được gọi lại. Việc xoá button từ StackView cần qua hai bước: Trước tiên sẽ xoá button từ danh sách các views được quản lý bởi StackView (để báo cho StackView biết khơng cần phải tính tốn kích thước và vị trí của button trong Stack nữa), tuy nhiên nó vẫn là Subview của StackView đó. Tiếp theo là xố button hồn tồn khỏi StackView. Và cuối cùng mới xoá các button khỏi mảng button.
// Clear the old button
for button in ratingButtons {
removeArrangedSubview(button) button.removeFromSuperview() }
ratingButtons.removeAll()
Chạy lại chương trình, điều chỉnh các giá trị thuộc tính trực tiếp trong lớp RatingControl và trên bảng thuộc tính Attributes Inspector! Cho nhận xét!
2.5.6 Table view
Ứng dụng quản lý món ăn trước tiên cần hiển thị danh sách các món ăn, mỗi món ăn có dạng như hình 2.5.6.1 (Có hình ảnh món ăn; Tên món ăn và đánh giá của món ăn đó).