我有一个视图,其中顶部有一个按钮,右下方有一个桌面视图。我默认显示一个部分。我想要实现的是,当单击按钮时,我想在默认部分下方添加一个全新的部分。我想在按下按钮时在现有部分下面添加新部分。
点击按钮之前:
按钮
<UITableView>
Default Section Header
Row 1
Row 2
Row 3
</UITableView>
按下按钮
按钮
<UITableView>
Default Section Header
Row 1
Row 2
Row 3
Newly added section header
Row 1
Row 2
Row 3
Row 4
</UITableView>
我搜索了很多,但我只找到了Objective-C引用。
我知道我需要使用以下功能:
insertRowsAtIndexPaths
和insertSections
但我真的无法理解如何使用Swift。我是iOS开发的新手。
请帮帮我。提前谢谢!
答案 0 :(得分:0)
我只是给你一些代码。用作参考。
class MyInfoView: UIView, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var myInfoTableView: UITableView!
var headerNamesArray: [String]?//= ["Personal Details", "Contact Details","Emergency Contacts", "Dependents", "Immigration", "Job", "Salary", "Report-to", "Qualifications", "Memberships"]
var cellDetailsArray:NSDictionary?
var currentExpandedIndex:Int = -1
var isButtonTapped:Bool = false
//MARK:- Register Tableview Method -
func registerTableView()
{
println(self.frame)
myInfoTableView.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame) - 64)
myInfoTableView.registerNib(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "InfoCellID")
loadTableViewDetails()
}
//MARK:- Loading details from Plist -
func loadTableViewDetails()
{
cellDetailsArray = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("TextFieldNames", ofType: "plist")!)
headerNamesArray = cellDetailsArray!.allKeys as? [String]
println(cellDetailsArray)
}
//MARK:- tableview header button Action -
func headerButtonTapped(sender: AnyObject)
{
isButtonTapped = !isButtonTapped
var anIndex:NSInteger = sender.tag
var indexSet:NSMutableIndexSet = NSMutableIndexSet(index: anIndex)
if anIndex == currentExpandedIndex {
// myInfoTableView.deleteRowsAtIndexPaths( (currentExpandedIndex, withRowAnimation: UITableViewRowAnimation.Right);
currentExpandedIndex = -1
} else if (currentExpandedIndex != -1 ) {
indexSet.addIndex(currentExpandedIndex)
currentExpandedIndex = anIndex
isButtonTapped = true
} else {
currentExpandedIndex = anIndex
}
println(indexSet)
myInfoTableView.reloadSections(indexSet ,withRowAnimation:UITableViewRowAnimation.Middle)
}
}
//MARK:- TableView Delegate and DataSource Methods -
extension MyInfoView: UITableViewDataSource, UITableViewDelegate {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return headerNamesArray!.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
cellDetailsArray![headerNamesArray![section]];
return cellDetailsArray![headerNamesArray![section]]!.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("InfoCellID", forIndexPath: indexPath) as! CustomTableViewCell
var headerSection = indexPath.section
cell.userTextField.placeholder = cellDetailsArray![headerNamesArray![headerSection]]![indexPath.row] as? String
return cell
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if isButtonTapped && currentExpandedIndex == indexPath.section {
return 40.0
}
else {
return 0.0
}
}
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.5
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = NSBundle.mainBundle().loadNibNamed("TableHeaderView", owner: self, options: nil) [0] as! TableHeaderView
headerView.headerButton.setTitle(headerNamesArray![section], forState: .Normal)
headerView.applyViewStyle()
headerView.headerButton.tag = section
headerView.headerButton.addTarget(self, action: Selector("headerButtonTapped:"), forControlEvents:.TouchUpInside)
headerView.arrowImageView.image = UIImage(named: "sidearrow.png")
if currentExpandedIndex == section {
headerView.arrowImageView.image = UIImage(named: "downarrow.png")
}
return headerView
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40.0
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
}
}
答案 1 :(得分:0)
否你不需要插入任何东西。只需更新要显示的数据的变量,然后重新加载tableview。
e.g。在 Swift 3
cert, err := generate(opts)
return func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
if err != nil {
return nil, err
}
return cert, err
}
然后你可以这样做来更新tableview:
class TableViewController: UITableViewController {
var sections = ["pizza", "deep dish pizza"]
var items = [["Margarita", "BBQ Chicken", "Pepperoni"], ["sausage", "meat lovers", "veggie lovers"]]
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section]
}
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items[section].count
}
免责声明:如果您使用的是Xcode 6,您可能正在使用Swift 2.2,但功能显然相似,前提保持不变。