我有一个带有一个主视图控制器的程序,其中包括一个按钮,用户可以通过该按钮点击以显示4页"快速帮助" UIPageViewController.这4页是QuickHelpViewController0ID - QuickHelpViewController3ID,每一页都是标准UIViewController.当他们点击按钮时,我运行这个:
-(void)showQuickHelp
{
// Load the quick help page view controller
self.quickHelpPageVC = [self.storyboard instantiateViewControllerWithIdentifier:@"QuickHelpPageViewControllerID"];
self.quickHelpPageVC.dataSource = self;
// Create initial quick help page
UIViewController *quickHelpVCA = [self quickHelpVCForPageIndex:0];
NSArray <UIViewController *> *quickHelpVCs = @[quickHelpVCA];
// And assign it to the page VC
[self.quickHelpPageVC setViewControllers:quickHelpVCs direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self presentViewController:_quickHelpPageVC animated:YES completion:nil];
} // showQuickHelp:
Run Code Online (Sandbox Code Playgroud)
UIPageViewControllerDataSource当用户滚动到下一页/上一页时,我还提供了根据需要创建4个页面中的每一个页面.
这适用于iOS 9.3和10.x. 对于除iPhone X(模拟器)之外的所有设备,它也适用于11.0.在那个,4页指示点的行在屏幕的底部向下,只比iOS 11提供的新"主栏"上方1或2个像素(向上滑动以切换应用程序等).
我发现了一个来自Apple的视频,名为Building Apps for iPhone X,其中开发人员讨论修复类似问题,但在这种情况下,他的解决方案是简单地改变自动布局以将孩子限制UIPageControl在底部的"安全区域"而不是传统的底部布局指南.但我没有UIPageControl在另一个视图控制器上使用; 我正在使用a …
我在Interface Builder(Xcode 8)中遇到了一个奇怪的问题.基本上,我无法启用(选择)辅助功能特性; IB拒绝了我的尝试.
例如,我有一个UILabel,它启用了"静态文本"和"启用用户交互"特征.我可以单击"静态文本"复选框以禁用它.但是当我再次单击它以重新启用它时,复选框会短暂显示一个减号(" - "),然后消失,不选中复选框.
我不知道如何重新启用该复选框(或任何其他).任何解决方案将不胜感激!
我有一个iOS 11应用程序,目前可以查询任何Google表格电子表格,以获取任何命名工作表(选项卡)中的所有数据,假设电子表格是公开的(即,不需要身份验证或授权).这是我当前代码的简化版本,可以正常工作:
-(void)fetchSheet
{
if (self.service == nil)
{
self.service = [[GTLRSheetsService alloc] init];
self.service.APIKey = @"MY_API_KEY";
}
// Build the query
NSString *range = @"MainSheet!A1:E";
GTLRSheetsQuery_SpreadsheetsValuesGet *query = [GTLRSheetsQuery_SpreadsheetsValuesGet queryWithSpreadsheetId:self.spreadsheetId range:range];
// Execute the query
[self.service executeQuery:query delegate:self didFinishSelector:@selector(parseSheetWithTicket:finishedWithObject:error:)];
} // fetchSheet
- (void)parseSheetWithTicket:(GTLRServiceTicket *)ticket finishedWithObject:(GTLRSheets_ValueRange *)result error:(NSError *)error
{
// Check error, process as desired
} // parseSheetWithTicket:finishedWithObject:error:
Run Code Online (Sandbox Code Playgroud)
现在,我想做出改变,使得纸张的所有者可以限制片如果需要,只是我的应用程序,但我不希望用户需要一个谷歌帐户,或登录谷歌.我的应用程序应该能够在没有用户参与的情况下阅读电子表格.任何人都可以通过共享MyApp@gmail.com用户(我的应用知道的用户)的只读访问权限,让电子表格与我的应用一起使用.我能找到的最好的想法是如何在没有用户干预的情况下授权应用程序(网络或安装)?这涉及使用Google OAuthPlayground进行初始身份验证,然后使用授权令牌和刷新令牌结束.(当然,我正在使用GTLRSheetsService 服务的,而不是在该网页上显示.驱动服务)的想法是,我的应用程序可以在未来任何时刻使用刷新标记,和谷歌客户端库将使用刷新令牌来获取新的授权令牌,然后进行请求.
我意识到这种方法存在安全隐患.假设我的应用程序将通过iCloud或我托管的服务器获取刷新令牌.(如果我需要更改刷新令牌,这将特别方便.)现在我只是想让它与硬编码的刷新令牌一起工作.
我按照该页面上接受的答案中的说明进行操作,最后得到了刷新令牌(以及客户端ID等).但现在我不知道如何使用它.经过多次搜索,我发现了一些使用的代码GTMOAuth2Authentication,但我想我应该使用GTMAppAuth(对吧?).这是我的新版本fetchSheet:
-(void)fetchSheet
{
if (self.service == nil) …Run Code Online (Sandbox Code Playgroud) 我想这主要是关于iOS如何处理弃用API的问题.
我有一个支持iOS 8.3+的应用程序,它在9.3.x中运行良好,但它在iOS 10上运行.当我的应用程序允许用户选择联系人时,我得到的错误是:
由于未捕获的异常'CNPropertyNotFetchedException'而终止应用程序,原因是:'获取联系人时未请求属性.'
我在这里发现了另一篇文章,其中说ABAddressBook API已被弃用,我应该使用CNContactPickerViewController(和相关的ContactsUI类).我理解的答案是,推荐的解决方案是从弃用的类转移到新的和改进的类.但为什么我必须这样做?
我认为在以后的版本中通常仍然支持弃用的类和方法.对我来说,我的应用程序在iOS 9.3上工作正常,然后在10.0上崩溃是没有意义的,特别是考虑到它编译得很好(部署目标是"8.3",基本SDK是"最新(10.0)".)此外,一些代码仍然有效(`ABAddressBookCreateWithOptions').
最后,是否有一种很好的方法来分析代码并强调所有这些使用过时的API?我的构建输出没有显示任何此类警告.