Tôi đã thêm UISegmentedControl
vào đơn đăng ký của mình. Không có nút nào được chọn ở trạng thái bình thường. Tôi muốn triển khai sự kiện nhấp nút khi phân khúc đầu tiên được chọn và một sự kiện khác khi nhấp vào một nút khác.Xác định sự kiện nhấp cho UISegmentedControl
Trả lời
Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn chỉ cần có để thực hiện một phương thức hành động mục tiêu (được hỗ trợ bởi UIControl
là lớp cha mẹ của UISegmentedControl
) cho hằng số UIControlEventValueChanged
, chính xác như trong ví dụ được đưa ra trong số reference documentation của UISegmentControl.
ví dụ:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
sử dụng cho một tin nhắn với chữ ký sau đây:
- (void)action:(id)sender
hoặc
[segmentedControl addTarget:self
action:@selector(action:forEvent:)
forControlEvents:UIControlEventValueChanged];
cho
- (void)action:(id)sender forEvent:(UIEvent *)event
hoặc
[segmentedControl addTarget:self
action:@selector(action)
forControlEvents:UIControlEventValueChanged];
đối với phương pháp đơn giản nhất:
- (void)action
đó là loại tiêu chuẩn của bộ chọn mục tiêu hành động sử dụng trong UIKit.
Chỉ cần thông báo nhanh: Tôi tin rằng nếu bạn xác định phương thức là - (void) thì bạn sẽ muốn bộ chọn là @selector (action) hoặc nếu không nó sẽ bị lỗi. –
Bộ chọn phải khớp chính xác với thông báo, nhưng không có tham số, vì vậy @selector (action: forEvent :) là bộ chọn cho hành động "- (void): (id) choEvent: (UIEvent *) event" – Jonathan
Tôi có một câu hỏi , hành động này sẽ được gọi ngay cả khi tôi thay đổi chỉ mục đã chọn theo cách thủ công? Nếu tôi không muốn điều đó xảy ra, tôi có thể nghe một số sự kiện kiểm soát khác không? – JohnVanDijk
Bạn có thể đính kèm một handler trong IB đến sự kiện giá trị thay đổi: UIControlEventValueChanged
hoặc bạn có thể làm điều đó trong mã:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
Hãy thử thế này,
UISegmentedControl * travelModeSegment = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil), NSLocalizedString(@"Walking", nil), nil]];
[travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)];
[cell addSubview:travelModeSegment];
[travelModeSegment release];
sau đó viết một hành động,
if (travelModeSegment.selectedSegmentIndex == 0) {
//write here your action when first item selected
} else {
//write here your action when second item selected
}
Tôi hy vọng nó sẽ giúp bạn
Nó đáng chú ý là bộ chọn phải phù hợp với một phương pháp chính xác, nhưng không có thông số thực tế.
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
Điều này làm tôi bối rối trong thời gian dài nhất và không rõ ràng so với câu trả lời trước đó.
Cảm ơn bạn rất nhiều vì đã cố gắng giải thích, Jonathan. Đây là một trong những điều tôi cần phải làm rõ cho bản thân mình ... erm ... 'đôi khi bây giờ' ;-) 'Cũng được trình bày rõ ràng; nó đã đi thẳng vào thư viện mã của tôi! :-) – Slowburner
thử điều này:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
đơn giản như vậy, bạn cần phải thực hiện hành động bằng cách sử dụng kịch bản để điều khiển xem để làm cho hành động này để làm việc.
- (IBAction)searchSegmentedControl:(UISegmentedControl *)sender
{
switch (sender.selectedSegmentIndex) {
case 0:
NSLog(@"First was selected");
break;
case 1:
NSLog(@"Second was selected");
break;
case 2:
NSLog(@"Third was selected");
break;
default:
break;
}
}
để sử dụng SWIFT này:
segmentedControl.addTarget(self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged)
và thực hiện một phương pháp như thế này:
func segmentSelected(sender: UISegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
}
Mở rộng UISegmentedControl nếu bạn muốn gọi một hành động cụ thể khi phân khúc được chọn sẽ được chọn:
class CustomSegmentedControl : UISegmentedControl
{
override init()
{
super.init()
}
override init(frame:CGRect)
{
super.init(frame:frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func valueChanged(index:Int)
{
// ACTION GOES HERE
}
}
và gọi bạn "valueChanged" trong "segmentSelected" như thế này:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
phiên bản đơn giản trong nhanh chóng cập nhật
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
cú pháp nhanh nhất mới nhất: self.segmentedControl.addTarget (self, action: #selector (segmentSelected (sender :)), for: .valueChanged) – Gilles
- 1. Tại sao event.namespace không được xác định cho sự kiện nhấp?
- 2. Sự kiện nhấp hoãn sự kiện
- 3. Nhận sự kiện nhấp đúp
- 4. TabPage Nhấp vào Sự kiện
- 5. Sự kiện mờ dừng sự kiện nhấp chuột hoạt động?
- 6. Làm cách nào để tôi có thể xác định sự kiện được nhấp của nút self.editButtonItem?
- 7. Xác định nguyên nhân khiến sự kiện cuộn phát ra
- 8. Sự kiện nhấp vào nút trên Android
- 9. Sự kiện LongClick cũng kích hoạt Sự kiện nhấp
- 10. WP7 - Sự kiện nhấp chuột hình ảnh?
- 11. Ràng buộc loại bỏ không xác định cho nhấp chuột
- 12. Nhấp vào sự kiện trên SlidingPaneLayout
- 13. jQuery-JTable: thêm vào sự kiện nhấp chuột cho hàng?
- 14. Nhấp vào sự kiện cho hình chữ nhật SVG
- 15. Chờ cho sự kiện nhấp chuột để hoàn thành
- 16. Truy vấn sự kiện nhấp chuột Jquery
- 17. Ngăn sự kiện nhấp chuột sau sự kiện được tổ chức và sự kiện mouseup
- 18. Nhấp vào Sự kiện trong UITableView
- 19. Sự kiện nhấp chuyển tiếp CSS3
- 20. Nhấp và kéo chuột Sự kiện WPF
- 21. ASP.NET + ModalPopupExtender + Nhấp vào Sự kiện
- 22. Xác thực biểu mẫu trên sự kiện Nhấp với trình xác thực jQuery
- 23. Xác định danh sách các trình xử lý sự kiện được liên kết với sự kiện
- 24. Xử lý DataGridHyperlinkColumn Nhấp vào Sự kiện
- 25. Mô phỏng sự kiện nhấp trong AS3
- 26. trên sự kiện nhấp trong wx.Panel?
- 27. thêm sự kiện nhấp vào fullcalendar
- 28. Nhấp vào sự kiện trên TinyMCE 4.0
- 29. jQuery "sau khi nhấp vào" sự kiện
- 30. Nhấp vào sự kiện trên jTable -Java
Làm thế nào để tôi đặt phân khúc đồng bằng trong UISegmented Control. Cảm ơn. – Pugal
@Pugal devan đặt phân khúc thuộc tính kiểu kiểm soát phân khúcControl.segmentedControlStyle = UISegmentedControlStyleBordered; – Warrior