将NSArray中的每个NSString元素显示为UIButton Objective C

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将NSArray中的每个NSString元素显示为UIButton Objective C相关的知识,希望对你有一定的参考价值。

我正在创建一个读取文本文件的应用程序,将每个换行符拆分为NSArray元素,然后(希望)在彼此之下显示UIButtons,其标题是数组元素的名称。

例如,假设文本文件包含以下内容:

Apples
Pears
Bananas
Mangos

然后读取文本文件(我们称之为fruit.txt),并将其放入NSString

NSString *fruit = [[NSString alloc]initWithContentsOfFile:@"/var/mobile/fruit.txt" encoding:NSUTF8StringEncoding error:nil];

然后用换行符分成NSArray

NSArray *individualFruit = [fruit componentsSeparatedByString:@"\n"];

所以

individualFruit[0] => Apples
individualFruit[1] => Pears
individualFruit[2] => Bananas
individualFruit[3] => Mangos

但是,随着一些编码魔术(可能使用for循环),我们最终得到这样的东西:

 -------------------
|_______Fruit_______| <- UINavigationBar
|       Apples      | <- UIButton
|___________________|
|       Pears       | <- UIButton
|___________________|
|       Bananas     | <- UIButton
|___________________|
|       Mangos      | <- UIButton
|___________________|
|                   |
|         _         |
|        ( )        |
 -------------------

(原谅我可怕的ascii艺术,它的意思是iPhone。)

然而…

如果用户要向文件添加另一行文本,例如:

Apples
Pears
Bananas
Mangos
Carrot

然后打开应用程序将创建另一个按钮,如下所示:

 -------------------
|_______Fruit_______| <- UINavigationBar
|       Apples      | <- UIButton
|___________________|
|       Pears       | <- UIButton
|___________________|
|       Bananas     | <- UIButton
|___________________|
|       Mangos      | <- UIButton
|___________________|
|       Carrot      | <- UIButton
|___________________|
|        ( )        |
 -------------------

从文本文件中删除一行将删除相应的按钮。

这可能吗?

答案

是的,这是可能的,它应该很简单 - 我会使用这种方法:

  1. 将tableView添加到您的UIViewController

如果元素数量太大,这将允许您具有滚动按钮​​。这也意味着您可以更改单元格,此效果将应用于您的所有按钮。如果你正在考虑手动添加它们,那么不要 - 想象一下你的阵列中是否有1000个水果 - 它们不会在不滚动的情况下适合屏幕。

  1. 创建自定义单元格

创建一个自定义单元格并在其中间放置一个UIButton。然后,您可以初始化cellForRowAtIndex中的按钮以设置按钮的标题

// Swift
let title = individualFruit[indexPath.row] as! String
cell.button.setTitle(title for: .normal)

// Obj-C
NSString * title = individualFruit[indexPath.row];
[cell.button setTitle: title];

如果您不确定是否要创建自定义单元格,请在Stackoverflow上查找 - 它并不难,并且有大量可用资源。

  1. 添加或删除时更新tableView

为此,您需要确保numberOfRowsForSection链接到您的数组:

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

现在,当您添加和删除时,您只需重新加载tableView即可更新tableView。

tableView.reloadData()
[tableView reloadData];

如果你希望它看起来更好一些,那么可能会使用插入和删除单元格(documentation)来解决一些功能,但这超出了问题的范围。

  1. 链接按钮

根据您要按访问按钮的方式,您可以选择多种选项。

a)在您创建的CustomTableCellClass中处理它并单击按钮操作。 b)向UIButtons(数组中的索引)添加标记,然后在cellForRowAtIndex中添加目标。然后,当您单击按钮时,将调用目标方法,您可以检查发送方上的标记以计算按钮的索引,从而计算数组中的标题。

注意:这再次略微超出了问题的范围,因为它没有被明确询问,但为什么有一个按钮不会被按下。

此功能全部使用非常基本的核心ios功能。我编写的代码都是sudo代码,不应该复制粘贴 - 而是应该阅读并理解这些概念,然后自己构建功能。如果您有不确定因素,我很乐意编辑答案以使其更加清晰。

以上是关于将NSArray中的每个NSString元素显示为UIButton Objective C的主要内容,如果未能解决你的问题,请参考以下文章

将 NSNumber* 的 NSArray 存储为 Core Data 中的 NSString

如何将 NSArray 元素加入 NSString?

NSArray 作为核心数据 fetchRequest 中的参数

NSMutableArray-->NSString

将 NSString 转换为字符的 NSArray [重复]

将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)