我需要在另一个顶部添加一个新视图(w/ViewController).用户暂时与此新视图交互,然后我想删除它.在较旧版本的Xcode中,我能够将其添加为子视图.我现在收到一个EXC_BAD_ACCESS错误.
我不希望将添加的视图作为模态.我需要通过添加的视图查看原始背景.我已经阅读了很多关于新的自定义containerViews,addChildView和presentView的内容.我看不出其中任何一个都是明确的答案.
这是以前工作的旧代码 - 主ViewController中的Action:
-(IBAction)showWhiteView:(id)sender
{
WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
[self.view addSubview:whiteView.view];
}
Run Code Online (Sandbox Code Playgroud)
在添加的视图中删除它的操作:
-(IBAction)removeView:(id)sender
{
[self.view removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
也许一个VISUAL EXAMPLE将有助于解释 - 假设主视图是海洋,动画波浪和云移动由MainView控制器控制.用户点击了一些东西,我想在主视图中添加一条船(WhiteView).我希望用户与船进行交互:点击这里帆打开,点击那里锚点等等(需要WhiteViewController的方法)最终我想从海洋中移除船.
谢谢Tim - 新增代码:
-(IBAction)showWhiteView:(id)sender
{ WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
[self addChildViewController:whiteView];
[whiteView didMoveToParentViewController:self];
[self.view addSubview:whiteView.view]; }
Run Code Online (Sandbox Code Playgroud)
并在WhiteViewController中删除:
-(IBAction)removeView:(id)sender
{ [self.view removeFromSuperview];
[self removeFromParentViewController]; }
Run Code Online (Sandbox Code Playgroud)
我期待着有关改善这一点的任何进一步建议.谢谢大家!
我正在开发一个你在登录服务器的iphone应用程序,在你获得验证后,我的应用程序会将你移动到另一个viewcontroller,你可以使用按钮发送你的gps位置.出于某种原因,当我在下一个viewcontroller中按下按钮时,我收到此错误:
Administrator[3148:c07] -[UIViewController SendGPS:]: unrecognized selector sent to instance 0x88b58d0
2013-01-08 16:01:21.662 Administrator[3148:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController SendGPS:]: unrecognized selector sent to instance 0x88b58d0'
Run Code Online (Sandbox Code Playgroud)
如果我在单个视图控制器中应用我的gps代码按钮,结果可以正常工作,但当我使用我的应用程序与两个viewcontrollers时,第一个重定向到第二个(如果只有你登录到服务器)我得到这个错误.我通过检查来自服务器的响应的条件移动到第二个viewcontroller.这是我用来更改viewcontrollers的代码:
NSString *compare = [NSString stringWithFormat:@"true"];
if ( [compare isEqualToString:string]) {
UIViewController* FourthViewController = [[UIViewController alloc] initWithNibName:@"FourthViewController" bundle:[NSBundle mainBundle]];
[self.view addSubview:FourthViewController.view]; }
else
NSLog(@"validation not complete");
Run Code Online (Sandbox Code Playgroud)
这是我使用NSTimer的按钮:
-(IBAction)SendGPS:(id)sender
{
Timer= [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(requestIt) userInfo:nil repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?提前致谢!
有没有人知道如何防止视图控制器从屏幕的最左侧从左向右滑动被解除(或从NavigationController堆栈弹出)?
我上传了一段视频来帮助解释我的意思.在模拟器和物理设备中都会出现此问题.
原因:某人将在屏幕上签名,因此,从屏幕左侧开始将导致导航控制器弹出当前视图控制器(即返回屏幕).
这是一个特定的MMDrawerController问题,尽管可能与其他iOS抽屉控制器有关.
我的MMDrawerController运行良好,可以通过在抽屉tableview中选择一行将不同的视图控制器加载到"中心".
但是,每次我在抽屉中选择一个菜单项时,我都想避免实例化我的视图控制器.这似乎效率低下,特别是如果用户在会话期间多次在屏幕之间切换.我猜一个更好的方法是存储我实际使用的(实例化的)视图控制器作为变量并重用?我有很多视图控制器可能会加载到中心,每个视图控制器最初都会在viewDidLoad中执行一些"工作".
以下是我将新视图控制器加载到中心的方法(在我的DrawerViewController.didSelectRowAtIndexPath方法中):
MyViewConroller * newCenter = [[MyViewConroller alloc] init];
UINavigationController * nav = [[MMNavigationController alloc] initWithRootViewController:newCenter];
if(indexPath.row==0){
[self.mm_drawerController
setCenterViewController:nav
withCloseAnimation:YES
completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
关于加载这些视图控制器的最佳方法的想法/评论将不胜感激.
我有一个带有排序按钮的表视图控制器,我用它来允许用户更改tableview的排序顺序.按下按钮时,我会转到排序视图控制器,并传入当前排序顺序,UIPickerView将其选中并设置为所选项目.
如果用户更改了选择器中的选定项,我想将其发送回父视图控制器,以便它可以重新排序表.
到目前为止,我已经看到了两种方法:设置委托或使用NSNotificationCenter.我决定试试后者.
在我的SortViewController中,我捕获任何更改pickerView:didSelectRow:InComponent,然后将新值作为命名通知发布.
在父视图控制器中,我在视图控制器的init中添加了一个addObserver调用,以便它正在侦听该通知,但显然从未发送通知.
这是代码:
TableViewController:
var sortOrder: String = "Name"
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "setSortOrder:",
name: "sortOrderChangedNotification",
object: sortOrder )
Run Code Online (Sandbox Code Playgroud)
接收功能:
func setSortOrder( notification: NSNotification ) {
// set the sort order
println("Received sortOrderChangedNotification")
}
Run Code Online (Sandbox Code Playgroud)
SortViewController:
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) {
println("Picker view selection changed!")
var selRow = sortPickerView.selectedRowInComponent(0)
NSNotificationCenter.defaultCenter().postNotificationName("sortOrderChangedNotification", object: sortMethods[selRow] )
}
Run Code Online (Sandbox Code Playgroud)
我从来没有得到setSortOrder的println输出,据我所知,这可能意味着a)通知没有被推送(即使didSelectRow中的println打印)b)我的观察者没有收到它或c )我的观察者设置错了.
任何输入将不胜感激.
我是一个 swift 程序员新手,我被要求编写一个应用程序,允许您输入一个单词,然后生成一个随机的俳句 这是一个选项卡式应用程序,有两个 ViewController。(诗)根据那个词。所以在 FirstViewController 中我有数据,我想在 SecondViewController 中以一种很好的方式显示该数据。我有所有的诗行和所有在 FirstViewController 中,但我想在 SecondViewController 中访问这些变量。我尝试创建一个函数,它只返回它们,然后在 SecondViewController 中调用该函数,但没有任何结果,因为该函数只是返回 nil。如果你们中的任何人可以帮助,我会很高兴谢谢!
这是 FirstViewController:
import UIKit
import Foundation
class FirstViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var keyWordTextField: UITextField!
@IBOutlet weak var syllableSlider: UISlider!
@IBOutlet weak var syllableSliderLabel: UILabel!
var syllableSliderValue = 1
@IBOutlet weak var lineOneTextField: UITextField!
@IBOutlet weak var lineTwoTextField: UITextField!
@IBOutlet weak var lineThreeTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
lineOneTextField.text …Run Code Online (Sandbox Code Playgroud) 所以我在这里发布了一个问题,其中一个回答者建议使用自定义容器视图控制器.
我想要做的是有一个类似下面的应用程序:

这是一个非常糟糕的图表,但我想要弄清楚的是,有一个普遍的背景,标志和边界; 唯一需要改变的是内容部分.
我在网上看了很多,并没有发现有关swift的自定义容器视图控制器视图控制器以及如何根据用户选择交换视图控制器的部件.
有人能够解释这是否可以迅速解决?也许它被称为其他东西,我正在寻找错误的东西.如果可能的话怎么办呢?
谢谢.
我在xcode 7(swift)中有一个项目,我想在故事板中加载不同的viewscontrollers设计,使用左右滑动功能,然后转到下一个viewcontroller或返回.现在我有这个,但只是从右到左淡化,我想要两个淡入淡出.
func respondToSwipeGesture(sender: UISwipeGestureRecognizer) {
switch sender.direction {
case UISwipeGestureRecognizerDirection.Right:
print("SWIPED DERECHA")
self.performSegueWithIdentifier("cambio2", sender: nil)
case UISwipeGestureRecognizerDirection.Left:
print("SWIPED IZQUIERDA")
self.performSegueWithIdentifier("cambio", sender: nil)
default:
break
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个大型ios应用程序,我也是一个新手.我试图在一个大型应用程序的故事板中找到正确的场景.我在.swift文件中,我需要一个快速的方法来确定哪个场景与该swift控制器文件相关联.我现在知道的唯一方法是遍历每个场景并查看Class属性,这将永远需要.是否有快捷方式从快速文件跳转到相关场景?
我最近注意到我的每个应用程序视图都有一个特定的错误/行为:如果用户在视图出现时在 UI 组件上点击太快,则点击会被忽略。如果用户在点击之前稍等片刻,则点击有效。
Storyboard 用于情节提要,点击手势识别器位于 UIImageview 上并使用 IOS 10.2。
通过不同的论坛,我阅读了以下选项:
以上均未成功。任何人都会在视图加载后第一次点击时遇到类似问题?
[更新:我意识到这种不当行为并非特定于该应用程序。要尝试的两个测试:
为 iPhone 和两个视图控制器控制器 A 和控制器 B 创建一个 xCode 项目。两个按钮:控制器 A 视图上的按钮转到控制器 B 视图和返回控制器 B 视图中的按钮返回控制器 A 视图。点击从视图 A 转到 B,在 B 中点击返回并尝试立即点击按钮转到 B。第一次点击也不起作用。
进入 iPhone 的设置。点击通知。按设置返回主设置屏幕,立即点击通知。如果足够快,第一次点击不起作用。第二次点击有效或在第一次点击之前等待一段时间。
现在的问题是:这看起来像是 iPhone 应用程序中的一个常见问题。你知道某个地方是否会有一个共同的设置吗?或者这是给定 IOS 版本的常见错误?]
斯蒂芬
viewcontroller ×10
ios ×8
swift ×4
xcode ×2
containers ×1
ibaction ×1
ipad ×1
iphone ×1
objective-c ×1
segue ×1
selector ×1
storyboard ×1
transition ×1
view ×1