小编RjC*_*RjC的帖子

Swift:故事板中的本地化 - 标签没有添加到Main.strings?

当我尝试本地化我的应用程序并为目标语言创建一个新的Main.strings文件时,我在界面构建器(标签,按钮,...)中创建的所有内容都会添加到新的Main.strings文件中(基本和语言)我可以相应地本地化文本.

但是当我稍后在界面构建器中向ViewController添加标签或按钮时,它不会自动添加到Main.strings文件中以获取基本和语言版本.

那么,我怎样才能找出按钮/标签的ObjectID是什么,以便我可以将它添加到字符串文件中?

或者是否有另一种方法可以强制Xcode自动将新添加的标签和按钮添加到这些文件中?

xcode localization localizable.strings ios swift

10
推荐指数
1
解决办法
3287
查看次数

Swift:如何在每次出现表视图时重新加载新内容(例如数组)?

我有一个带有两个视图的选项卡栏:

  • 表格视图
  • 视图控制器添加数据

然后我有一个数组,该数组将从视图控制器中更新为新内容(例如,仅附加新字符串)。

该数组填充表视图。现在,当应用程序启动时,表视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器、将内容添加到数组并通过选项卡栏移回表视图时,我无法更新表视图以便它从数组中提取新内容。

我尝试在和tableview.reloadData()中使用,但表视图不会重新加载,并且仍然显示它最初在应用程序启动时加载的数据,但不显示新内容。viewDidAppearviewDidLoad

override func viewWillAppear(_ animated: Bool) {
        tableView.reloadData()
        weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
    }
Run Code Online (Sandbox Code Playgroud)

这就是我填充表格视图的方式:

// MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return weightArray.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "FavoriteCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)

        let …
Run Code Online (Sandbox Code Playgroud)

arrays tableview ios swift

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

Swift:呈现视图控制器时缺少标签栏 - 如何解决这个问题?

我在故事板中创建了一个简单的标签栏,其中有三个视图.标签栏效果很好,但是当我尝试通过选项卡中的按钮显示另一个视图控制器时,新视图将放置在整个屏幕上以及标签栏上.

这是我按下按钮时到目前为止呈现视图的方式:

@IBAction func buttonPressed(_ sender: UIButton) {

        let newVC = self.storyboard?.instantiateViewController(withIdentifier: "extraVC")
        self.present(newVC!, animated: true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

我的另一个想法是:

        self.tabBarController?.present(vc!, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,这也没有用.

那么如何在标签栏中显示另一个视图控制器(以便仍然显示底部栏)?

tabbar viewcontroller ios swift

4
推荐指数
2
解决办法
6282
查看次数

Swift:如何创建一个全局扩展以在任何地方使用 Double 或 Int?

这是我的问题:我正在尝试为 Double(或 Int)创建一个全局扩展,它可以在每个 ViewController 中使用,而无需重复每个 ViewController 文件顶部的代码。

例如:

extension Double {
    var mileToFeet: Double {return self * 5280}
}
Run Code Online (Sandbox Code Playgroud)

当然我可以这样称呼它:

let feet = 26.mileToFeet
Run Code Online (Sandbox Code Playgroud)

显然,当我将扩展程序放在 ViewController 的顶部并在代码中使用它时,这很有效,但是我可以在哪里放置扩展程序以便我可以在任何地方使用它?

我试图将它放入 AppDelegate,但这不起作用?我在正确的轨道上吗?

谢谢

extension-methods swift

3
推荐指数
1
解决办法
2050
查看次数

Swift:如何检查UserDefaults是否存在以及是否保存选定的标准值?

我正在尝试检查UserDefaults密钥是否存在,如果没有将其设置为我选择的标准值,但这里的堆栈溢出答案并没有帮助我实现这一点.

基本上我有几个UISwitch,一个打开,其余的从一开始就设置为关闭.现在我的问题是,当加载viewController并且那些键不存在时,我不知道如何将这些初始状态保存到UserDefaults中.

这就是我试图检查UISwitch的密钥是否存在以及是否将其设置为true的原因(因为这是我希望它的状态),然后再次检查密钥的bool是什么,并将UISwitch设置为它(这在另一次打开viewController时非常重要):

func setupSwitches() {
    let defaults = UserDefaults.standard

    //check if the key exists 
    if !defaults.bool(forKey: "parallax") {
        switchParallax.setOn(true, animated: true)
    } 

    //check for the key and set the UISwitch
    if defaults.bool(forKey: "parallax") {
        switchParallax.setOn(true, animated: true)
    } else {
        switchParallax.setOn(false, animated: true)
    } 

}
Run Code Online (Sandbox Code Playgroud)

当用户按下相应的按钮时,我设置了UserDefaults键,如下所示:

@IBAction func switchParallax_tapped(_ sender: UISwitch) {
    let defaults = UserDefaults.standard

    if sender.isOn == true {
        defaults.set(true, forKey: "parallax")
    } else {
        defaults.set(false, forKey: "parallax")
    }
}
Run Code Online (Sandbox Code Playgroud)

这显然有效,但问题出在上面的第一个代码中.

首先,我不确定如何检查它是否存在,如果没有将其设置为"true",并且由于该函数被称为setupSwitches(),它将在每次显示viewController时运行.

因此,我不知道是否有更好的方法(例如,由于内存问题)来检查密钥是否存在,如果没有将其设置为true,如果它已经存在,则从UserDefaults获取bool并将开关设置为正确的国家.

xcode boolean nsuserdefaults uiswitch ios

3
推荐指数
1
解决办法
3301
查看次数

Swift:SKStoreReviewController - 多久可以调用一次?

文档说,一个应用程序可以每年通过 SKSToreReviewController 要求用户三次进行评分。

大多数建议在 UserDefaults 中保存一个变量,并在使用几次后调用该函数。如果您每年调用该函数超过 3 次,会发生什么情况?App Store 会忽略这些电话并在一年后再次要求评级还是会出现某种错误?

如果应用程序已更新(即从 1.0 版跳转到 2.0 版)会发生什么?这 3 个请求会被重置吗?

storekit ios skstorereviewcontroller

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