Змена TextLabel у статычных вочак у UITableView

У мяне ёсць статычны UITableView, змесціва кожнага вочка я зрабіў у раскадроўкі, але мне трэба змяніць texLabels некаторых вочак праграмна падчас выканання. Як я магу гэта зрабіць?

14

7 адказы

Стварыце ўласцівасць для кожнага вочка вы хочаце змяніць у кантролеры таблічнага, напрыклад, так:

@property (weak) IBOutlet UITableViewCell *cell1;
@property (weak) IBOutlet UITableViewCell *cell2;

Падключыце кожны да вочка ў Interface Builder.

Калі вам трэба толькі змяніць тэкст лэйбла, вы можаце выкарыстоўваць

self.cell1.textLabel.text = @"New Text";

Калі вам неабходна замяніць увесь ярлык, выкарыстоўвайце

UILabel *newLabel = [[UILabel alloc] init];
self.cell2.textLabel = newLabel;
29
дададзена
Выдатна !!! Дзякуючы. Я не ведаю, што TextLabel мае ўласцівасць тэксту.
дададзена аўтар vZ10, крыніца
Не, вы не павінны захаваць усе вашы клеткі, таму што вы павінны паўторна выкарыстоўваць клеткі, а не загружаць усе вочкі памяці, вы павінны мець толькі тыя клеткі, якія вы паказваеце загружаныя!
дададзена аўтар ggrana, крыніца
@ggrana Паколькі гэтыя статычныя клеткі мы маем справу з таго, што, верагодна, не ў тым, што многія з іх, так што выкарыстанне памяці не будзе гэтак значным. Тым не менш, я згодны, што адрэдагаваны адказ лепш, чым у мяне, так што я upvoted яго.
дададзена аўтар Alyssa Ross, крыніца

@RossPenman апублікаваў добры адказ.

@ggrana адзначыў патэнцыйную праблему рабіць з памяццю і паўторнае выкарыстанне клетак, <�моцны>, аднак, не турбавацца аб тым, што ...

Для UITableView са статычнымі клетак усе клеткі инстанцируются фронт, перад viewDidLoad называецца на вашым UITableViewController і паўторна не выкарыстоўваюцца такім чынам, што дынамічныя клеткі з'яўляюцца. Такім чынам вы можаце нават проста ўзяць IBOutlets непасрэдна на UITextFields , UISwitches , UILabels і рэчы, якія вы сапраўды зацікаўлены у тым, што вы адкінулі ў вас статычныя клеткі ў раскадроўкі.

10
дададзена
Я не ведаю, што вы можаце стварыць IBOutlets ад статычных клетак. Прыйдзецца капаць больш у дакументацыі, я думаю.
дададзена аўтар rohan-patel, крыніца

Я меў патрэбу ў гэтым.

dispatch_async(dispatch_get_main_queue(), ^{
    (...textLabel updates)
    [self.tableView reloadData];
});
4
дададзена

Вы можаце атрымаць вочка з вашага пункту гледжання табліцы з дапамогай метаду cellForRowAtIndexPath, вам трэба будзе вызначыць выхад, які атрымлівае свой TableView.

__weak IBOutlet UITableView *tableView;

пасля таго, што вы можаце атрымаць вочка накшталт:

NSIndexPath* indexPath = [NSIndexPath indexPathForRow:yourRow inSection:yourSection];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[[cell textLabel] setText:@"Your new text"];

Можа быць, пасля ўстаноўкі тэксту вам трэба будзе наладзіць ярлык, або ваш рост клетак, калі вы хочаце больш глыбокую дапамогу даць больш інфармацыі, і я буду рады дапамагчы вам.

І вы зрабілі, спадзяюся, што гэта дапамагае.

2
дададзена
Вам не трэба абвясціць выхад да Tableview, так як вы ўжо карыстаецеся UITableViewController.
дададзена аўтар Mike Pollard, крыніца
UITableView сканфігуравана з «Static клетак» можа існаваць толькі ў кантэксце UITableViewController.
дададзена аўтар Mike Pollard, крыніца
<�Р> <�моцны> Свіфта 3 Рашэнне: </моцны> </р>

Па-першае зрабіць IBOutlet статычнага TableViewCell

@IBOutlet weak var cellFirst: UITableViewCell!

затым у viewDidLoad змена этыкеткі Імя.

cellFirst.textLabel?.text = "Language"

Note: If you have attached a label on TableViewCell then just hide it using storyboard.

2
дададзена

Спадзяюся, што гэта працуе:

@IBOutlet weak var yourTextField: UITextField!
private var yourText: String?

Я проста звычай у дэлегатам гэтага Tableview у:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    guard let yourText = yourText else { return }
    yourTextField.text = yourText
}

Пры змене тэксту:

yourText = "New text here"
tableView.reloadData()
1
дададзена

Вы можаце зрабіць нешта накшталт гэтага

for (int section = 0; section < [table numberOfSections]; section++) {
    for (int row = 0; row < [table numberOfRowsInSection:section]; row++) {
        NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
        UITableViewCell* cell = [self cellForRowAtIndexPath:cellPath];
        cell.backgroundColor =  [UIColor blackColor];
        cell.textLabel.textColor = [UIColor whiteColor;
        cell.textLabel.text = @"Your text";
    }
}

Акрамя таго, пераканайцеся, каб захаваць вашы змены з viewDidAppear і змясціць іх у viewWillAppear ці вы сутыкнецеся з праблемамі,

0
дададзена