XCode关于多视图切换不显示UIButton等控件的问题
2012-01-14 11:50
429 查看
问题描述:
有如下3个UIViewController
StartViewController:除了一个View外什么也没有
LoadViewController:一个View和一个Socket
GameViewController:一个View,View里的button,View里的ImageView,一个Socket
逻辑流程如下:
第一步:在StartViewController.m中先加载LoadView
loadViewController = [[LoadViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].loadNibFileName
bundle:nil];
[self.view
addSubview:loadViewController.view];
第二步:LoadView是关于Socket通讯,在处理Socket通讯的时候用到如下函数:(没有启动额外的线程,依然是主线程)
-(void)statusProcess:(uint8_t)statusCode {
switch (statusCode) {
........
case SOCKET_RCVING: {
S32 result = ........;
switch (result) {
case
1: {
//发送消息,初始化GameViewController
[[AppDelegate
currentDelegate].startViewController
performSelector:@selector(initGameViewController)];
break;
}
case
2: {
....
}
}
break;
}
......
default:
break;
}
}
第三步:初始化GameViewController
-(void)initGameViewController {
gameViewController = [[GameViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].gameNibFileName
bundle:nil];
[gameViewController createServer];
}
第四步:创建gameViewController的Socket和执行Socket,依然是statusProcess函数
-(void)statusProcess:(uint8_t)statusCode {
switch(statusCode) {
.....
case
SOCKET_SENDING: {
//启动解析线程
[NSThread detachNewThreadSelector:@selector(dataAnalysisThread)
toTarget:self withObject:nil];
break;
}
.....
default:
break;
}
}
第五步:启动解析线程dataAnalysisThread
-(void)dataAnalysisThread {
float coreAnalysisTimer =
0;
do {
int flag = ...........;
switch (flag) {
.....
case
xxx: {
[appDelegate.startViewController
performSelectorOnMainThread:@selector(changeViewFromLoadViewToGameView)
withObject:nil waitUntilDone:YES];
break;
}
case xxx2: {
//往ImageView里添加内容
break;
}
.....
default: {
//NSLog(@"获得其他tag
:%d",flag);
break;
}
}
}while(xxxxxx);
}
第六步:显示GameViewController
-(void)changeViewFromLoadViewToGameView {
[self
removeLoadView];
[self.view addSubview:gameViewController.view];
}
此时就会出现GameViewController的button居然显示不了,ImageView可以正常显示
解决的办法是如下:
把第三步的函数更改成如下:
-(void)initGameViewController {
gameViewController = [[GameViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].gameNibFileName
bundle:nil];
[gameViewController createServer];
//这里非常的重要,解决button不显示的问题
[self.view
insertSubview:gameViewController.view
atIndex:1];
}
把第六步的函数更改成如下:
-(void)changeViewFromLoadViewToGameView {
//这里非常的重要,解决button不显示的问题
[self
removeLoadView];
//[self.view addSubview:gameViewController.view];
}
这样就可以正常的显示button和ImageView了
在initGameViewController的时候,就把View加入到self.view中,但是被loadView给遮住了,
在changeViewFromLoadViewToGameView的时候,把loadView给remove掉
花了6,7个多小时才解决这个问题。
有如下3个UIViewController
StartViewController:除了一个View外什么也没有
LoadViewController:一个View和一个Socket
GameViewController:一个View,View里的button,View里的ImageView,一个Socket
逻辑流程如下:
第一步:在StartViewController.m中先加载LoadView
loadViewController = [[LoadViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].loadNibFileName
bundle:nil];
[self.view
addSubview:loadViewController.view];
第二步:LoadView是关于Socket通讯,在处理Socket通讯的时候用到如下函数:(没有启动额外的线程,依然是主线程)
-(void)statusProcess:(uint8_t)statusCode {
switch (statusCode) {
........
case SOCKET_RCVING: {
S32 result = ........;
switch (result) {
case
1: {
//发送消息,初始化GameViewController
[[AppDelegate
currentDelegate].startViewController
performSelector:@selector(initGameViewController)];
break;
}
case
2: {
....
}
}
break;
}
......
default:
break;
}
}
第三步:初始化GameViewController
-(void)initGameViewController {
gameViewController = [[GameViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].gameNibFileName
bundle:nil];
[gameViewController createServer];
}
第四步:创建gameViewController的Socket和执行Socket,依然是statusProcess函数
-(void)statusProcess:(uint8_t)statusCode {
switch(statusCode) {
.....
case
SOCKET_SENDING: {
//启动解析线程
[NSThread detachNewThreadSelector:@selector(dataAnalysisThread)
toTarget:self withObject:nil];
break;
}
.....
default:
break;
}
}
第五步:启动解析线程dataAnalysisThread
-(void)dataAnalysisThread {
float coreAnalysisTimer =
0;
do {
int flag = ...........;
switch (flag) {
.....
case
xxx: {
[appDelegate.startViewController
performSelectorOnMainThread:@selector(changeViewFromLoadViewToGameView)
withObject:nil waitUntilDone:YES];
break;
}
case xxx2: {
//往ImageView里添加内容
break;
}
.....
default: {
//NSLog(@"获得其他tag
:%d",flag);
break;
}
}
}while(xxxxxx);
}
第六步:显示GameViewController
-(void)changeViewFromLoadViewToGameView {
[self
removeLoadView];
[self.view addSubview:gameViewController.view];
}
此时就会出现GameViewController的button居然显示不了,ImageView可以正常显示
解决的办法是如下:
把第三步的函数更改成如下:
-(void)initGameViewController {
gameViewController = [[GameViewController
alloc] initWithNibName:[AppDelegate
currentDelegate].gameNibFileName
bundle:nil];
[gameViewController createServer];
//这里非常的重要,解决button不显示的问题
[self.view
insertSubview:gameViewController.view
atIndex:1];
}
把第六步的函数更改成如下:
-(void)changeViewFromLoadViewToGameView {
//这里非常的重要,解决button不显示的问题
[self
removeLoadView];
//[self.view addSubview:gameViewController.view];
}
这样就可以正常的显示button和ImageView了
在initGameViewController的时候,就把View加入到self.view中,但是被loadView给遮住了,
在changeViewFromLoadViewToGameView的时候,把loadView给remove掉
花了6,7个多小时才解决这个问题。
相关文章推荐
- vb中关于mscal.ocx控件的显示问题
- [iOS]关于iOS中界面视图横屏/竖屏切换的问题总结
- 关于 Fragment内嵌套Fragment 切换显示不正确的问题。
- 关于viewPager嵌套viewPager,切换上层fragment内层fragment不显示的问题
- 关于SurfaceView横竖屏切换显示问题
- 关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- 关于android语言切换后通知栏显示的问题
- 这个坑,你遇到过吗?关于UIView上添加一个手势,导致子视图为UIButton的无法响应的问题
- 关于新加的SQLite数据库内容不能同步显示到控件中的问题分析.txt
- 关于asp.net2.0里的Multiview和View控件的显示与隐藏实现的问题
- 关于android的pulltorefreshview组件在视图页面无法显示的问题
- 关于CListCtrl控件中无法显示新插入列的问题
- 关于UIButton setImage 不显示 和 setTitle不能和谐相处的问题
- 关于minigui的皮肤控件无法显示问题
- 关于Xcode中无法显示全部文件的问题
- Xcode 界面视图显示不满屏的问题
- 关于IOS某图片添加控件,图片从相册或拍照保存后,再次进入时点击放大图无法显示的问题
- 关于visual studio类视图和资源视图不显示类和资源的问题