>我有以下代码,它是语言选择选项的分段控件。案例 0 用于英语,案例 1 用于希腊语,然后将其传递给UITextView
。问题是,每次我按下案例 1 或 0 的按钮时,我都必须返回到上一个视图控制器,这是一个表视图控制器,然后返回到"detailViewController"以显示正确的语言。有没有办法在不在视图控制器之间来回切换的情况下完成此操作?类似于小动画或刷新或重新加载方法之类的东西 UITextView
.
int a;
- (IBAction)languageSeg:(id)sender {
switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
a=0;
break;
case 1:
a=1;
break;
default:
break;
}
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
UIImage *saladImage = [UIImage imageNamed:@"salad.jpg"];
UIImage *fishImage = [UIImage imageNamed:@"fish.jpg"];
[textDetail setScrollEnabled:YES];
[textDetail setContentSize:CGSizeMake(320, 190)];
//Switch the UIImages and UILabel based on item
switch (itemNumber) {
case 0:
itemName.text = @"Salad";
itemPic.image = saladImage;
self.title = @"Salads";
if (a==0){
textDetail.text = @"description in english";
}
if (a==1){
textDetail.text = @"description in greek";
}
break;
case 1:
// etc.
您可以在 languageSeg: 方法中更新文本视图的文本,就像您最初在 viewWillT出現中设置它的方式一样:
我将创建一个单独的方法来处理语言切换,然后从 viewWillSeem 和 languageSeg 以及您需要它的任何其他位置调用该方法。
例如,您的语言设置器方法将包含当前位于 viewWillSeem 底部的代码:
- (void) languageSetter {
switch (itemNumber) {
case 0:
itemName.text = @"Salad";
itemPic.image = saladImage;
self.title = @"Salads";
if (a==0){
textDetail.text = @"description in english";
}
if (a==1){
textDetail.text = @"description in greek";
}
break;
case 1:
// etc.
break;
default:
// default case
break;
}
}
然后你的 viewWillAppear: 方法将如下所示:
-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
UIImage *saladImage = [UIImage imageNamed:@"salad.jpg"];
UIImage *fishImage = [UIImage imageNamed:@"fish.jpg"];
[textDetail setScrollEnabled:YES];
[textDetail setContentSize:CGSizeMake(320, 190)];
[self languageSetter];
}
你的语言Seg:方法看起来像这样:
- (IBAction)languageSeg:(id)sender {
switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
a=0;
break;
case 1:
a=1;
break;
default:
break;
}
[self languageSetter];
}
很多实现将取决于其余代码的设置方式和您的个人需求,但这是一般的想法。
我有一个带有语言选择器的应用程序,我使用 NSUserDefaults。就像一个魅力。在带有选取器的视图控制器中:
- (IBAction)languageSeg:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
[defaults setInteger:0 forKey:@"language"];
break;
case 1:
[defaults setInteger:1 forKey:@"language"];
break;
default:
break;
}
}
在视图控制器显示语言的vieWillAppear
中:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults integerForKey:@"language"] == 0) {
textDetail.text = @"description in english";
}else{
textDetail.text = @"description in greek";
}
现在,在 viewDidLoad
方法中,如果用户尚未设置值,则需要为其指定默认值,如下所示:(再次在视图控制器中显示设置,而不是选取器视图。
if (![defaults integerForKey:@"language"]) {
[defaults setInteger:0 forKey:@"language"];
}
textDetail.text = @"description in english";
switch (itemNumber)
叫在哪里?
如果它位于 viewDidLoad
或 viewWillAppear
等方法中,则仅在显示此视图时调用它。
您可能需要将此部分提取为一种方法,并将其放入(IBAction)languageSeg:(id)sender
中。例如:
- (void)updateView
{
switch (itemNumber) {
case 0:
itemName.text = @"Salad";
itemPic.image = saladImage;
self.title = @"Salads";
if (a==0){
textDetail.text = @"description in english";
}
if (a==1){
textDetail.text = @"description in greek";
}
break;
case 1:
// etc.
}
然后在viewDidLoad
中调用此方法,并在切换块后
languageSeg:
调用此方法。