В моем приложении я добавил UISegmentedControl
. Ни одна из кнопок не выбрана в нормальном состоянии. Я хочу реализовать событие нажатия кнопки, когда выбран первый сегмент, и другое событие, когда нажата другая кнопка.Определить событие click для UISegmentedControl
ответ
Если я правильно понимаю ваш вопрос, вы просто должны реализовать target-action (поддерживается UIControl
, который является родительским классом UISegmentedControl
) для константы UIControlEventValueChanged
, точно так же, как в примере, приведенном в UISegmentControl reference documentation.
т.е.
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
используется для сообщения со следующей подписью:
- (void)action:(id)sender
или
[segmentedControl addTarget:self
action:@selector(action:forEvent:)
forControlEvents:UIControlEventValueChanged];
для
- (void)action:(id)sender forEvent:(UIEvent *)event
или
[segmentedControl addTarget:self
action:@selector(action)
forControlEvents:UIControlEventValueChanged];
для самого простого способа:
- (void)action
которые являются стандартными типами селекторов целевых действий, используемых в UIKit.
Просто быстрый хедз-ап: Я считаю, что если вы определяете действие как -void, то вы хотите, чтобы селектор был @selector (action), иначе он сработает. –
Селектор должен точно соответствовать сообщению, но без параметров, поэтому @selector (действие: forEvent :) является селектором для: - (void) действие: (id) отправитель forEvent: (UIEvent *) событие « – Jonathan
У меня есть вопрос , будет ли это действие вызываться, даже если я изменил выбранный индекс вручную? Если я не хочу, чтобы это произошло, я могу послушать какое-то другое событие управления? – JohnVanDijk
Вы можете прикрепить обработчик в IB к событию значения изменено: UIControlEventValueChanged
или вы можете сделать это в коде:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
Попробуйте это,
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];
затем написать действие,
if (travelModeSegment.selectedSegmentIndex == 0) {
//write here your action when first item selected
} else {
//write here your action when second item selected
}
Я надеюсь, что это поможет вам
Стоит отметить, что селектор должен соответствовать методу точно, но без фактических параметров.
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
Это смущает меня в течение самого длительного времени, и это не совсем ясно из более ранних ответов.
Огромное спасибо за ваши усилия, Джонатан. Это была одна из тех вещей, которые мне необходимы, чтобы прояснить для себя ... <чудеса, что звучит как разумное признание моим сверстникам> erm ... 'довольно когда-нибудь сейчас' ;-) 'Также представлено красиво; это пропало прямо в моей кодовой библиотеке! :-) – Slowburner
попробовать это:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
Простой, как это, вам нужно сделать действие с помощью раскадровки к контроллеру представления для того, чтобы это действие на работу.
- (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;
}
}
для СВИФТ использования этого:
segmentedControl.addTarget(self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged)
и реализовать метод, как это:
func segmentSelected(sender: UISegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
}
Продлить UISegmentedControl если вы хотите, чтобы вызвать определенное действие, когда выбран выбранный сегмент:
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
}
}
и позвонить "ValueChanged" в "segmentSelected", как это:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
Простая версия в стрижа обновленный
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
последний быстрый синтаксис: self.segmentedControl.addTarget (self, action: #selector (segmentSelected (sender :)), для: .valueChanged) – Gilles
- 1. Как определить событие click для контрольного массива userdefine
- 2. UISegmentedControl: как определить щелчок по текущему сегменту?
- 3. Динамическое событие click для кнопок
- 4. Событие Click для прямоугольника SVG
- 5. событие click для изображений gridview
- 6. Прикрепите событие click для div
- 7. Событие Double Click для DataGrid
- 8. Событие Click HorizontalScrollView
- 9. Событие click click on fullcalendar
- 10. Строка NSAttributed для UISegmentedControl
- 11. onmouseover и событие click QLineEdit
- 12. jquery: как определить, будет ли за подсказкой следовать событие click?
- 13. MS Access Определить элемент списка, нажав на событие click
- 14. Как определить событие Right Click в Visual Studio?
- 15. Как определить, какая кнопка мыши вызвала событие click в WPF?
- 16. Как определить, какой элемент управления генерировал событие Click?
- 17. Как определить ключевой код и событие click в одном условии?
- 18. Событие ListView Click
- 19. Bookmarklets - событие click
- 20. событие click без ответа
- 21. Переяснить событие click
- 22. Отложенное событие click
- 23. jquery: связать событие «click»
- 24. Событие Click не срабатывает
- 25. C# событие WPF click
- 26. ionicModal отключая CLICK-событие
- 27. Событие jQuery click не работает?
- 28. Событие checkbox click on table row click
- 29. Получить элемент, содержащий событие Click
- 30. Как вызвать событие click?
Как установить обычный сегмент в UISegmented Control. Благодарю. – Pugal
@Pugal devan задает свойство стиля сегмента управления segmentedControl.segmentedControlStyle = UISegmentedControlStyleBordered; – Warrior