我有一个包含三个细分的UISegmentedControl
按钮。
在ViewController.m
中,这工作得很好 - 按下按钮会触发正确的方法。
我有另一个单独的UIButton
,当它被按下时,它需要首先检查UISegmentedControl
的状态(查看当前按下的按钮),然后根据该段值触发方法
以下是我单独UIButton
的代码。按钮本身正在工作,但我似乎无法弄清楚如何获取UISegmentedControl
段的当前值。
非常感谢这里的任何帮助。
我是OBJ-C
的新手。我知道如何在VisualBasic
中执行此操作,因此我会非常感谢更详细的答案,因为我需要了解“为什么'”。谢谢。
- (IBAction)decodeButton:(id)sender {
UISegmentedControl *segment = [UISegmentedControl alloc]; // THIS DOES NOT WORK.
if (segment.selectedSegmentIndex == 0) {
decode(textToDecode);
} else if(segment.selectedSegmentIndex == 1) {
decode1(textToDecode);
} else if(segment.selectedSegmentIndex == 2) {
decode2(textToDecode);
}
}
答案 0 :(得分:18)
Here是一个教程using UISegmentedControl in iOS.
只需创建一个参考对象并将其正确连接到文件所有者。
IBOutlet UISegmentedControl *segmentedControl;
然后设置属性
@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl;
.m文件中的合成
@synthesize segmentedControl;
现在您可以随时访问所选索引。
- (IBAction)decodeButton:(id)sender {
if (segmentedControl.selectedSegmentIndex == 0) {
decode(textToDecode);
} else if(segmentedControl.selectedSegmentIndex == 1) {
decode1(textToDecode);
} else if(segmentedControl.selectedSegmentIndex == 2) {
decode2(textToDecode);
}
}
答案 1 :(得分:5)
alloc
按钮按下操作时,您的代码UISegmentedControl
。因此,请使用以下代码创建sUISegmentedControl
及其操作。
SegmentChangeView=[[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Segment1",@"Segment2",@"Segment3",nil]];
SegmentChangeView.frame=CGRectMake(5, 44, self.view.bounds.size.width-10, 33);
SegmentChangeView.selectedSegmentIndex=0;
SegmentChangeView.segmentedControlStyle=UISegmentedControlStyleBar;
SegmentChangeView.momentary = YES;
[SegmentChangeView setTintColor:[UIColor blackColor]];
NSDictionary *attributes =[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13],UITextAttributeFont,nil];
[SegmentChangeView setTitleTextAttributes:attributes forState:UIControlStateNormal];
[SegmentChangeView addTarget:self action:@selector(SegmentChangeViewValueChanged:) forControlEvents:UIControlEventValueChanged];
SegmentChangeView.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:SegmentChangeView];
-(IBAction)SegmentChangeViewValueChanged:(UISegmentedControl *)SControl
{
if (SControl.selectedSegmentIndex==0)
{
decode(textToDecode);
}
else if (SControl.selectedSegmentIndex==1)
{
decode1(textToDecode);
}
else if (SControl.selectedSegmentIndex==2)
{
decode2(textToDecode);
}
}
答案 2 :(得分:3)
您应该从代码中删除UISegmentedControl *segment = [UISegmentedControl alloc] ;
,因为它每次都会分配一个新的UISegmentedControl实例,而不是
为您创建一个出口UISegmentController
,如
@property (strong, nonatomic) IBOutlet UISegmentedControl * segment;
然后在viewcontroller.m
文件中的任何位置,您都可以使用
segment.selectedSegmentIndex;
希望这有意义,
此致
答案 3 :(得分:1)
此代码表示您每次点击都会创建一个新对象
UISegmentedControl *segment = [UISegmentedControl alloc] ;
你需要做的事情就是IBOutlet
segmentedControl
(属性)然后我会为你工作。不要在按钮方法中创建新对象。当您创建IBOutlet时,它将与segmentControl
链接,您的代码将在那个时间工作。感谢
答案 4 :(得分:1)
试试这个
- (IBAction)segmentedControlChanged:(id)sender
{
UISegmentedControl *s = (UISegmentedControl *)sender;
if (s.selectedSegmentIndex == 1)
{
//code
}
else
{
//code
}
}