Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode-IB元素在运行时未显示在我的视图中_Ios_Objective C_Xcode_Interface Builder_Uisegmentedcontrol - Fatal编程技术网

Ios Xcode-IB元素在运行时未显示在我的视图中

Ios Xcode-IB元素在运行时未显示在我的视图中,ios,objective-c,xcode,interface-builder,uisegmentedcontrol,Ios,Objective C,Xcode,Interface Builder,Uisegmentedcontrol,我的iOS项目有一个非常奇怪的问题。 我有一个带有一些标签和按钮的UIViewController,当用户进入这个视图时,我会以编程方式构建一个游戏板,这就是扫雷游戏。 我现在想做的是在我的例子中添加一个简单的元素,一个分段控件,但我也尝试了一个按钮,但在板的底部或开始处不起作用 当我从界面生成器中添加一些东西时,我可以在故事板中看到,但当我运行应用程序puff时,它就消失了! 视图仅包含旧元素,而不显示新元素。 是的,我做了一个出口: @property (weak, nonatomic) I

我的iOS项目有一个非常奇怪的问题。 我有一个带有一些标签和按钮的UIViewController,当用户进入这个视图时,我会以编程方式构建一个游戏板,这就是扫雷游戏。 我现在想做的是在我的例子中添加一个简单的元素,一个分段控件,但我也尝试了一个按钮,但在板的底部或开始处不起作用

当我从界面生成器中添加一些东西时,我可以在故事板中看到,但当我运行应用程序puff时,它就消失了! 视图仅包含旧元素,而不显示新元素。 是的,我做了一个出口:

@property (weak, nonatomic) IBOutlet UISegmentedControl *clickTypeSegmentedControl;
是的,我检查了分段控制的参考是否正常。 我真的不明白出了什么问题,如果有人能帮助我,我将非常感激

**编辑:我添加了ViewController的代码,还有一些其他方法我忽略了,因为它们只处理游戏。我重复一遍:即使我添加了一个没有动作的简单按钮,它也不会显示

#import "GameViewController.h"
#import "GameBoardModel.h"
#import "ScoreViewController.h"
#import <AVFoundation/AVFoundation.h>

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

@interface GameViewController ()
@property (weak, nonatomic) IBOutlet UILabel *timerLabel;
@property (weak, nonatomic) IBOutlet UILabel *bombsLabel;
@property (weak, nonatomic) IBOutlet UIButton *restartButton;
@property(nonatomic, strong) AVAudioPlayer *soundEffects;
@property (weak, nonatomic) IBOutlet UISegmentedControl *clickTypeSegmentedControl;

@end

@implementation GameViewController
@synthesize difficulty, timer, playerName, scoreToAdd, clickTypeSegmentedControl;

double secondsPassed=-1.0f;
int seconds=0;
int totalRowsCols=0, totalMines=0, heightWidth=0, clicKNumber=0;

static NSString * const IMAGE_NAME_FLAG = @"flag.png";
static NSString * const IMAGE_NAME_BOMB_X = @"bomb.png";


- (void)viewDidLoad
{

    [super viewDidLoad];

    self.navigationItem.hidesBackButton = YES;
    UIBarButtonItem *backButton =[[UIBarButtonItem alloc]initWithTitle:@"Menù" style:UIBarButtonItemStyleBordered target:self action:@selector(popAlertAction:)];
    self.navigationItem.leftBarButtonItem=backButton;


    clickTypeSegmentedControl.selectedSegmentIndex = 0;


    rootController = (BombsSeekerViewController *)[self.navigationController.viewControllers objectAtIndex:0];


    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    playerName = [defaults objectForKey:@"NomeGiocatore"];

    scoreToAdd = [[NSMutableDictionary alloc]init];

    [self createGameBoard:difficulty];
    [self newGame:nil];


}


-(void) newGame:(UIButton *)sender {
    [self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
    clicKNumber=0;
    secondsPassed=0;
    self.timerLabel.text = [self labelString:secondsPassed];

    self.game = [[Game alloc] initWithWidth:totalRowsCols AndHeight:totalRowsCols AndMineCount:totalMines];
    self.buttonArray = [[NSMutableArray alloc] init];
    [self.restartButton addTarget:self action:@selector(newGame:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.restartButton];
    [self.view addSubview:self.timerLabel];
    [self.view addSubview:self.bombsLabel];
    for(int i = 0; i < totalRowsCols; i++) {
        for (int j = 0; j < totalRowsCols; j++) {
            self.button = [[Tile alloc] initWithLocation: CGPointMake(j,i) andHW:heightWidth andBlock:self.game.board[j][i] andTag:(i*totalRowsCols+j)];
            [self.buttonArray addObject:self.button];
            [self.view addSubview:self.button];
            [self.button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
        }
    }

    [self.timer invalidate];
}


- (void) createGameBoard:(int)diff{
    switch (diff) {
        case 1:
            totalRowsCols = 6;
            totalMines = 2;
            heightWidth = 44;
            break;
        case 2:
            totalRowsCols = 8;
            totalMines = 16;
            heightWidth = 35;
            break;
        case 3:
            totalRowsCols = 10;
            totalMines = 25;
            heightWidth = 29;
            break;
    }
    self.flagCount = totalMines;
    _bombsLabel.text = [NSString stringWithFormat:@"%d",self.flagCount];

}


-(NSString *) labelString: (int) num {
    if(num < 10) {
        return [NSString stringWithFormat:@"00%i",num];
    }
    else if(self.timeCount.intValue < 100) {
        return [NSString stringWithFormat:@"0%i",num];
    }
    else if(self.timeCount.intValue < 1000) {
        return [NSString stringWithFormat:@"%i",num];
    }
    else
        return @"---";
}

-(void) click:(Tile *)sender {
    if(clicKNumber <1){
        [self refreshLabel:self.timer];
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1
                                                      target:self
                                                    selector:@selector(refreshLabel:)
                                                    userInfo:nil
                                                     repeats:YES];
        clicKNumber++;

    }

    if(self.game.gameStatus == STATUS_LOST || self.game.gameStatus == STATUS_WON) return;
    if (self.clickTypeSegmentedControl.selectedSegmentIndex == 0 && sender.block.marking == MARKING_BLANK) {
        [self.game clickedAtColumn: sender.point.x AndRow: sender.point.y];
        for(Tile *b in self.buttonArray) {
            if(b.block.marking == MARKING_CLICKED) {
                b.enabled = NO;
            }
            else if(b.block.marking == MARKING_BLANK) {
                [b setTitle:@"" forState:UIControlStateNormal];
                [b setImage:nil forState:UIControlStateNormal];
            }
        }

    }
    else if (self.clickTypeSegmentedControl.selectedSegmentIndex == 1){
        if(sender.block.marking == MARKING_BLANK && self.flagCount > 0) {
            sender.block.marking = MARKING_FLAGGED;
            self.flagCount--;
             _bombsLabel.text = [NSString stringWithFormat:@"%d",self.flagCount];
            [sender setImage:[UIImage imageNamed:IMAGE_NAME_FLAG] forState:UIControlStateNormal];
        }
        else if(sender.block.marking == MARKING_FLAGGED) {
            sender.block.marking = MARKING_BLANK;
            self.flagCount++;
             _bombsLabel.text = [NSString stringWithFormat:@"%d",self.flagCount];
            [sender setImage:[UIImage imageNamed:@"tile.png"] forState:UIControlStateNormal];
        }
    }

    if(self.game.gameStatus == STATUS_LOST) [self gameLost:sender];
    else if(self.game.gameStatus == STATUS_WON) [self gameWon];

}

确保序列图像板中的控制器链接到正确的控制器类。

如果这是我认为的,您不应该这样做:

[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];

调用viewDidLoad时,将调用newGame方法,该方法将从Superview中删除所有子视图。包括在情节提要中添加的内容。

在-viewDidLoad期间调用此方法:


因此,加载nib后,您放入nib中的任何内容都会被删除。

如果您确实需要解决方案,您确实需要显示更多代码。我应该显示什么代码?我知道没有代码,但这是因为直到昨天我才能够将项目添加到我的视图中,并看到它们,突然今天这不起作用。因此,可能是一些设置或其他设置,但它与游戏板没有连接,因为即使我将一个项目插入附在标签上的页面顶部,它也不会显示。嗯,很奇怪,仍然。。。发布你的代码!或者是故事板的截图。也许你的场景没有连接或者其他什么。只要给我们英特尔。我发布了ViewController的代码,不幸的是我还不能发布图像!请核对我的答案。谢谢你加了更多的代码。你是说身份检查器里的班级?这是正确的,我现在已经检查过了,我不太了解您的场景,但是如果您在脚本中添加了控件,那么请在interface builder中检查新控件是否位于旧控件之上,检查文档大纲以查看树。我认为旧控件仍然可见。使用hidden属性而不是从层次结构中删除视图[UIView removeFromSuperview]可能会暂时解决此问题。
-(void) newGame:(UIButton *)sender {
    [self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
    //...
}