【问题标题】:UISegmentedControl change value programmatically from toolbar clickUISegmentedControl 从工具栏单击以编程方式更改值
【发布时间】:2012-02-27 22:19:47
【问题描述】:

我有一个 .xib,其中有一个具有 UISegmentedControl 的视图,并且我正在以编程方式添加它们。

在 appdelegate 中,我编写了添加工具栏的代码,并且有事件。
在工具栏上单击 UISegmentedControl 从给定的 mutablearray 加载。

我想要做的是:当我点击工具栏按钮时 UISegmentedControl 的值无法更改。

我写了一个添加 UISegment 及其值的方法。每次单击工具栏按钮时,我都会调用该方法。

UISegmentedControl的创建方法:

delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;            

NSMutableArray *itemArray = [[NSMutableArray alloc] init];
itemArrayforID = [[NSMutableArray alloc] init];
itemArrayforImage = [[NSMutableArray alloc] init];

bool isfirst = true;

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
[segmentedControl removeFromSuperview];  

int temp =0;

NSLog(@"row count : %d",delegate.TopMenus.count);

for(int i=0;i<delegate.TopMenus.count;i++)
{        
    delegate.curTopsMenu = [delegate.TopMenus objectAtIndex:i];

    NSLog(@"toolbar click : %@",delegate.toolbarbtnclick);
    NSLog(@"parent_id : %@",[delegate.curTopsMenu valueForKey:@"parent_id"]);

    if([delegate.toolbarbtnclick isEqualToString:[delegate.curTopsMenu valueForKey:@"parent_id"]])
        {  
            int aaa = [[delegate.curTopsMenu valueForKey:@"top_menu_id"] intValue];
            if(isfirst)
            {
                MenuLoadID = [NSString stringWithFormat:@"%d",aaa]; 
                isfirst =false;
            }                   
            NSString *TEXT = [delegate.curTopsMenu valueForKey:@"top_menu_text"];
            NSString *TEXTID = [delegate.curTopsMenu valueForKey:@"top_menu_id"];
            NSString *SelectIMG = [delegate.curTopsMenu valueForKey:@"image_path"];

            NSLog(@" TEXT : %@ and TEXTID : %@",TEXT,TEXTID);

            [itemArray insertObject:TEXT atIndex:temp];
            [itemArrayforID insertObject:TEXTID atIndex:temp];
            [itemArrayforImage insertObject:SelectIMG atIndex:temp];                
            temp++;             
        }        
}    

segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
[segmentedControl removeFromSuperview]; 
segmentedControl.frame = CGRectMake(0, 100, 320, 40);

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 0;

[segmentedControl addTarget:self action:@selector(changeSegment:) forControlEvents:UIControlEventValueChanged];

UIImage *segmentSelected = [[UIImage imageNamed:@"games-on.png"] 
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *segmentUnselected = [[UIImage imageNamed:@"games-ho.png"] 
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected 
    forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setBackgroundImage:segmentSelected 
    forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[self.navigationController.view addSubview:segmentedControl];    
[segmentedControl release];   
segmentSelected = nil;

[itemArray release];

[self MenuRowCount];

工具栏按钮点击代码:

ViewController *VC = [[ViewController alloc] init];
[VC LoadTopMenuFromBottmClick];

【问题讨论】:

    标签: ios uisegmentedcontrol


    【解决方案1】:

    您的问题可能更清楚,但这是我对答案的最佳猜测。这假设 UISegmentedControl 是一个名为 yourSegmentedControl 的属性并且已被分配(最好由适当的 getter 分配)。

    更新启用/禁用:

    [self.yourSegmentedControl setEnabled:aBOOL forSegmentAtIndex:anInt];
    

    更新标题:

    [self.yourSegmentedControl setTitle:aString forSegmentAtIndex:anInt];        
    

    也就是说,您的代码可以更简单。如果将 UISegmentedControl 放在 UIViewController 而不是 appDelegate 中,则可以利用 toolbarItems 属性将控件附加到导航控制器。下一个代码不是完全您的问题,但可能具有指导意义:

    @interface StocksTableViewController()
    @property (nonatomic, strong) IBOutlet UISegmentedControl *stockFilterSegmentedControl;
    @end
    
    @implementation StocksTableViewController
    @synthesize stockFilterSegmentedControl = _stockFilterSegmentedControl;
    
    - (UISegmentedControl*)stockFilterSegmentedControl {
        if (!_stockFilterSegmentedControl) {
            _stockFilterSegmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All",@"Holdings", @"To Do", nil]];
            [_stockFilterSegmentedControl addTarget:self action:@selector(stockFilterControlPressed:) forControlEvents:UIControlEventValueChanged];
            _stockFilterSegmentedControl.selectedSegmentIndex = 0;
            _stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleHeight;
            _stockFilterSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        }
        return _stockFilterSegmentedControl;
    }
    
    - (NSArray*)navFooterToolbarArray {
        UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.stockFilterSegmentedControl];
        UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
        UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)];
        return [NSArray arrayWithObjects:flexibleSpace, barButtonItem, flexibleSpace, refresh, nil];    
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.toolbarItems = [self navFooterToolbarArray];
    }
    

    享受,

    达米安

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多