小编Luk*_*ger的帖子

如何在UIAlertController中添加UIImageView?

我想UIAlertController与提出警告UIImageViewActionSheet.但是,当我运行应用程序时,它正在终止.

这是我的代码:

UIAlertController *alert = [UIAlertController
                                  alertControllerWithTitle:@"Title"
                                  message:@"Welcome"
                                  preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okButton = [UIAlertAction
                            actionWithTitle:OK
                            style:UIAlertActionStyleDefault
                            handler:^(UIAlertAction *action)
                            {
                            }];
[alert addAction:okButton];
UIImageView *imgv = [[UIImageView alloc]initWithFrame:CGRectMake(20,20,50,50)];
imgv.image = [UIImage imageNamed:@"kaga.jpg"];
[alert setValue:imgv forKey:@"image"];
[self presentViewController:alert animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

objective-c uiimageview ios uialertcontroller

7
推荐指数
2
解决办法
1万
查看次数

取消流程后,GoogleSignIn 5没有提供正确的代码

我已将广告GoogleSignIn连播的数量从4 更新为5,现在不再提供正确的取消错误。

因此,一旦弹出窗口出现,我按“取消”。

Google Auth警报

现在AppAuthGoogleSignIn从版本5开始的基础框架将适当的取消错误传递给GoogleSignIn (org.openid.appauth.general错误-3)。而是GoogleSignIn将其包装为未知错误(com.google.GIDSignIn -1),以使您无法再正确捕获取消信息:

来自GIDSignInDelegate的方法:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)
Run Code Online (Sandbox Code Playgroud)

该错误说明:

Domain = com.google.GIDSignIn代码= -1“操作无法完成。(org.openid.appauth.general错误-3。)” UserInfo = {NSLocalizedDescription =操作无法完成。(org.openid.appauth.general错误-3。)}

ios swift google-signin

7
推荐指数
0
解决办法
110
查看次数

Swift协议继承

我有快速的代码:

protocol ParentProtocol {
    // stuff
}

protocol ChildProtocol: ParentProtocol {
    // additional stuff
}

protocol FooProtocol {
    var variable: ParentProtocol? { get }
}

class Foo:FooProtocol {
    var variable: ChildProtocol?
}
Run Code Online (Sandbox Code Playgroud)

我有编译器错误:

类型'Foo'不符合协议'FooProtocol'

我知道,根据FooProtocol,变量类型必须是ParentProtocol类型.另一方面ChildProtocol继承自ParentProtocol,所以它也是一个ParentProtocol

是否有任何解决方案以这种方式使用协议继承?

swift swift-protocols

6
推荐指数
1
解决办法
4104
查看次数

异常收集视图层次结构信息 - [UITextView _firstBaselineOffsetFromTop]仅在使用自动布局时有效

当我尝试在Xcode 9中调试视图层次结构时,我在控制台输出中收到此警告.

异常收集视图层次结构信息 - [UITextView _firstBaselineOffsetFromTop]仅在使用自动布局时有效

我不确定它意味着什么,我看不到视图层次结构.

xcode ios uiview-hierarchy

6
推荐指数
0
解决办法
145
查看次数

Swift中的异构通用容器

我在将通用类型的结构放入一个数组时遇到问题。我知道Swift会将Array的元类型转换为具体类型,这就是冲突。我试图找到其他解决方案,但我认为需要您的帮助。

在这里,我定义了结构和协议:

protocol ItemProtocol {
    var id: String { get }
}

struct Section<T: ItemProtocol> {
    var items: [T]
    var renderer: Renderer<T>
}

struct Renderer<T> {
    var title: (T) -> String
}
Run Code Online (Sandbox Code Playgroud)

这里有两个实现的示例结构ItemProtocol

struct Book: ItemProtocol {
    var id: String
    var title: String
}

struct Car: ItemProtocol {
    var id: String
    var brand: String
}
Run Code Online (Sandbox Code Playgroud)

这是我设置部分的方式:

let book1 = Book(id: "1", title: "Foo")
let book2 = Book(id: "2", title: "Bar")
let books = [book1, book2]
let bookSection = …
Run Code Online (Sandbox Code Playgroud)

arrays generics swift

6
推荐指数
1
解决办法
562
查看次数

如何在不询问iOS Swift登录的情况下自动登录?

我有不同的故事板叫做Main,tabBar,home,map等.在tabBar的故事栏中,我使用了SWRevealViewController视图并作为初始视图启动.在主要的Storyboard中,只有两个用于登录和注册控制器.

这是tabBar storyBoard的截图 在此输入图像描述

我的问题是当用户注销并返回时它自动进入主屏幕而不是登录屏幕[此问题是由于SWRevealViewController是初始视图控制器].

我试过这里的代码:在符号视图控制器中

在viewDidAppear中检查firebase中是否有可用的用户

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if API.User.CURRENT_USER != nil {
        // segue to the Tab Bar Controller
        self.performSegue(withIdentifier: "signInToTabBar", sender: nil)

    }
}
Run Code Online (Sandbox Code Playgroud)

登录动作:

  @IBAction func SignInButton(_ sender: Any) {

    view.endEditing(true)

    guard
        let email = emailTextField.text, !email.isEmpty,
        let password = passwordTextField.text, !password.isEmpty
        else {

            self.showErrorAlert(message: "Username or email or passowrd should not be empty")
            return
    }
    // show the progress to the user
    ProgressHUD.show("Starting sign-in...", interaction: false)

    // use the signIn class …
Run Code Online (Sandbox Code Playgroud)

xcode ios swrevealviewcontroller swift firebase-authentication

6
推荐指数
1
解决办法
714
查看次数

在UIApplication上名为-statusBar或-statusBarWindow的应用程序

我正在尝试使用Xcode 11 beta 6和iOS 13 beta 8构建我的应用程序,但是一旦它开始运行,它将引发此错误:

由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“在UIApplication上名为-statusBar或-statusBarWindow的应用程序:由于不再有状态栏或状态栏窗口,因此必须更改此代码。而是在窗口场景上使用statusBarManager对象。'

什么是窗口场景,如何使用statusBarManager
而且我不确定这是否相关,但是我没有使用any SwiftUI

uiwindow ios uistatusbar swift ios13

6
推荐指数
1
解决办法
1753
查看次数

无法将类型为"NSLayoutConstraint"的不可变值作为inout参数传递

我尝试重新分配引用NSLayoutConstraint.

class ViewController: UIViewController {
    @IBOutlet weak var myConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
        exchangeConstraint(&myConstraint)
    }
}

extension UIViewController {
    func exchangeConstraint(_ constraint: inout NSLayoutConstraint) {
        let spacing = constraint.constant
        view.removeConstraint(constraint)
        constraint = view.topAnchor.constraint(equalTo: anotherView.topAnchor, constant: spacing)
        view.addConstraint(constraint)
    }
}
Run Code Online (Sandbox Code Playgroud)

但在这里它给了我错误:

exchangeConstraint(&myConstraint)
-------------------^
Cannot pass immutable value of type 'NSLayoutConstraint' as inout argument
Run Code Online (Sandbox Code Playgroud)

我不明白的是它为什么说不可变值,而约束被声明为变量,而不是常量.

ios nslayoutconstraint swift inout

5
推荐指数
1
解决办法
301
查看次数

后台任务不调用 Swift 中的类

我有一个后台任务,应该返回一系列课程,然后将其发送到苹果手表。didReceiveMessage我正在通过调用内部任务WatchConnectivity

后台任务需要执行一些操作,例如打开领域数据库、查询结果和访问文档目录,然后将响应返回到课程字典。当手表输出其获取的课程数据时,该逻辑似乎有效。问题是我认为后台任务实际上并没有调用该方法getWatchCourses()

DispatchQueue.global().async {

    var foundCourses = [[String : Any]]()
    let application = UIApplication.shared
    backgroundTask = application.beginBackgroundTask(withName: "app.test.getCourses") {
        let watchModel = WatchCourseModel()
        let courses = watchModel.getWatchCourses()
        print("Courses: \(courses)")
        foundCourses.append(contentsOf: courses)
    }
    replyHandler(["response": foundCourses])
    application.endBackgroundTask(backgroundTask)
    backgroundTask = UIBackgroundTaskInvalid
}
Run Code Online (Sandbox Code Playgroud)

如果结果是硬编码的,这也不起作用getWatchCourses()。应用程序可以在后台执行此逻辑吗?或者它应该工作吗?

还值得指出的是,网上没有任何地方记录了这一点,他们总是指将简单的文本响应发送回手表,而不是处理器密集型的东西:(

谢谢

ios uibackgroundtask swift watchkit

5
推荐指数
1
解决办法
2640
查看次数

当键盘出现在 iOS11 上时,UITableView 将键盘的高度添加到 contentSize

我正在处理一个应该在 iOS 11 和 12 上工作的聊天。在 iOS 12 上一切都按预期工作。但是,在 iOS 11 上,我遇到了键盘出现后表格视图内容大小增加(无单元格)的问题。额外高度的数量与键盘高度相匹配。

演示

这是一个演示,左边是 iOS 11,右边是 iOS 12。在 iOS 12 上一切正常。当键盘出现时,请注意 iOS 11 上表格视图的底部。

表视图内容大小 iOS 11 表视图内容大小 iOS 12

视图/视图控制器层次结构设置

-= 视图控制器
+= 视图

- UINavigationViewController
    - UIViewController // Controlling contentInsets, contentOffset of the tableView
        + UIView
        - UITableViewController
            + UITableView
        - UIViewController // Controlling the text input bar at the bottom
            + ... // Other views
            + UITextView
Run Code Online (Sandbox Code Playgroud)

布局约束

表视图的锚点等于其超视图的锚点。所以全屏,忽略安全区域。所以当键盘出现时,框架不会改变,但底部的内容会插入。

更多细节

我已经设置了 tableView.contentInsetAdjustmentBehavior = .never

这就是我在键盘出现时计算表格视图的插入和偏移的方式。这很复杂,因为有几个场景应该有不同的行为。当键盘消失时,以及当文本输入的高度发生变化时,也会有类似的复杂计算。我总是想根据视图框架的变化向上或向下滚动表格视图。

@objc func handleKeyboardWillShowNotification(_ notification: NSNotification) { …
Run Code Online (Sandbox Code Playgroud)

uitableview uiscrollview ios swift ios11

5
推荐指数
1
解决办法
1339
查看次数