假设我有以下协议:
protocol Identifiable {
var id: Int {get}
var name: String {get}
}
Run Code Online (Sandbox Code Playgroud)
而且我有以下结构:
struct A: Identifiable {
var id: Int
var name: String
}
struct B: Identifiable {
var id: Int
var name: String
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我必须"符合"结构A和结构B中的可识别协议.但想象一下,如果我有N个结构需要符合这个协议......我不想'复制/粘贴' '一致性(var id:Int,var name:String)
所以我创建了一个协议扩展:
extension Identifiable {
var id: Int {
return 0
}
var name: String {
return "default"
}
}
Run Code Online (Sandbox Code Playgroud)
现在有了这个扩展,我可以创建一个符合Identifiable协议的结构,而不必实现这两个属性:
struct C: Identifiable {
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我无法为id属性或name属性设置值:
var c: C = C()
c.id = 12 // Cannot assign to …Run Code Online (Sandbox Code Playgroud) 将导航栏或工具栏(故事板)拖动到视图控制器时出现问题.
UINavigationBar的:

如上图所示,右侧按钮几乎与状态栏重叠.
使用UIToolbar它会发生相同的事情:

这个视图控制器旨在用作模态,这就是我没有使用UINavigationController的原因.
在另一节我使用UINavigationController,它看起来像我期望的那样:

如何在不重叠状态栏的情况下将UINavigationBar/UIToolbar拖动到视图控制器?
我提出了一个包含UIVisualEffectView的UIViewController,如下所示:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"segueBlur" sender:nil];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"segueBlur"]) {
((UIViewController *)segue.destinationViewController).providesPresentationContextTransitionStyle = YES;
((UIViewController *)segue.destinationViewController).definesPresentationContext = YES;
((UIViewController *)segue.destinationViewController).modalPresentationStyle = UIModalPresentationOverFullScreen;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用UIModalPresentationStyleOverFullScreen,以便当出现模糊的视图控制器时,模糊将"应用"到呈现它的视图控制器的内容; segue具有Cross Dissolve过渡风格.
效果看起来像预期的那样.但是,在iOS 9中,演示比iOS 10更流畅.在iOS 10中,当视图控制器出现时,它看起来像是两步动画,而在iOS 9中,模糊立即应用.
一张图片胜过千言万语所以我上传了一段显示这种奇怪行为的视频:
UIVisualEffectView iOS 9 vs iOS 10
我的问题是:如何在iOS 10中呈现iOS 10中的视图控制器?
我想在我的应用程序中加入一些Facebook集成.在这一点上,我已经设法登录,发布到朋友的墙上,检索朋友列表等等.除了一件事,一切都还好......
如果用户从您的Facebook设置/应用程序中删除应用程序 ,然后进入iOS应用程序,则代码无法识别Facebook应用程序已从用户设置中删除并假设已登录(这是问题,因为如果用户试图发布到朋友的墙上,应用程序什么都不做).
然后,用户关闭iOS应用程序并重新启动它...通过此重新启动,iOS应用程序"已修复"并检测到用户不再登录.
在用户从设置中删除Facebook应用程序之后,我无法立即检测到该时刻,以便将登录流程带给用户...
这是我的代码:
在我的应用程序的第一个场景......
if([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded)
{
NSLog(@"Logged in to Facebook");
[self openFacebookSession];
UIAlertView *alertDialog;
alertDialog = [[UIAlertView alloc] initWithTitle:@"Facebook" message:@"You're already logged in to Facebook" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alertDialog show];
[alertDialog release];
return YES;
}
else{
NSLog(@"Not logged in to Facebook"); //Show the login flow
return NO;
}
Run Code Online (Sandbox Code Playgroud)
这是openFacebookSession的代码
-(void)openFacebookSession
{
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { …Run Code Online (Sandbox Code Playgroud) 是否可以知道(访问)哪个图像被设置为手机背景?我想在我的应用程序中将相同的图像放在UIImageView中.
提前致谢!
ios ×4
objective-c ×3
cocoa-touch ×1
facebook ×1
ios10 ×1
ios7 ×1
iphone ×1
swift ×1
uistoryboard ×1
uitoolbar ×1
xcode8 ×1