2015-05-19 3 views
0

Я начинаю разработку мобильных приложений с помощью Swift. Я разработал форму внутри viewController, используя ячейки прототипа tableView (не используя UITableViewController и статические ячейки, поскольку мне нужно разместить другие элементы управления в контроллере представления).tableView прототип ячейки с кнопкой действия за пределами tableView

Каждая ячейка имеет уникальный идентификатор и разработана с использованием панели рассказов. Я создал подкласс для UITableViewCell и назначил его всем ячейкам.

class VehicleTableViewCell: UITableViewCell { 


@IBOutlet var txtModel: UITextField! 
//@IBOutlet weak var txtModel: UITextField! 
@IBOutlet weak var txtODO: UITextField! 
@IBOutlet weak var txtFuel1: UITextField! 
@IBOutlet weak var txtFuel2: UITextField! 

@IBOutlet weak var lblDistanceUnit: UILabel! 
@IBOutlet weak var lblFuel2Unit: UILabel! 
@IBOutlet weak var lblFuel1Unit: UILabel! 
@IBOutlet weak var lblMake: UILabel! 
@IBOutlet weak var lblFuelType: UILabel! 
@IBOutlet weak var lblCurrency: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
}} 

Вот мой UIViewController, что делает регулярный материал:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate,UISearchBarDelegate { 

@IBOutlet weak var tableView: UITableView! 

// Array of cell identifiers 
let cellArray = ["CellMake", "CellModel", "CellODO", "CellFuelType", "CellFuel1", "CellFuel2", "CellCurrency"] 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellArray[indexPath.row]) as! VehicleTableViewCell 
    if indexPath.row == 1 
    { 
     cell.txtModel.addTarget(self, action: "txtModelChanged:", forControlEvents: UIControlEvents.TouchUpInside) 

     println("Inside index row 1") 
    } 

    return cell   
} 

@IBAction func txtModelChanged(sender: UITextField!) 
{ 
    println("test") 
}} 

Вот несколько вещей, которые я запутался и не смог продолжить.

  1. Я добавил цели для txtModel в cellForRowAtIndexPath и замэпили функционировать txtModelChanged на touchUpInside события. Просто он не вызывал функцию и не вызывал никаких ошибок. Любая догадка о том, что может быть проблемой?

  2. Я пытаюсь получить значения всех объектов при нажатии кнопки «Готово». Как пройти через таблицуView, чтобы получить все значения?

  3. Есть ли другой лучший способ добиться того же?

ответ

0

Первый

Если вы хотите, чтобы огонь какой-то метод, когда пользователь касается вашего UITextField - вы должны переопределить текстовое поле метод делегата textFieldDidBeginEditing и вызвать отставку первый ответчик, чтобы избежать клавиатуры, а затем напишите свой код или вызовы метода.

Взято из: https://stackoverflow.com/a/4919134/2210926

В данном вопросе, это не важно, используете ли вы Свифт или Obj-C.

Второй

Это не вариант, у вас нет гарантии, что все ваше мнение клетка будет жива в тот момент. Вам нужно хранить все эти данные где-то, например, в массиве.

0

Для разработки общей формы я нашел https://github.com/escoz/QuickDialog очень полезно. Я использовал его в одном из моих приложений. Если вы хотите реализовать свою собственную логику, я думаю, что этот образец поможет вам вывести информацию.

0
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
return 280; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return 10; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     NSString *CellIdentifier = @"Cell"; 
     CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     } 
return cell; 
} 
Смежные вопросы