iPhone Tableview Cells مع TextView مخصص - احصل على مرجع TextView
-
22-09-2019 - |
سؤال
لديّ UableView مع 15 خلية ، ولكل منها مربع نص منفصل فيه. لقد قمت بتطبيق UITextViewDelegate وأتمكن من تلقي بيانات TextView التي تم تغييرها باستخدام TextViewDidChange (ETC). لكن لدي مشكلة كبيرة واحدة ، كيف أعرف أي TextView أرسل هذا ، (أي في أي خلية تم تغيير TextView؟)
من المثير للاهتمام أن يكون لديك الكثير من العمل ، ولكن لا يعرف بالضبط من أين يأتي.
تتوفر مجموعة كاملة من التعليمات البرمجية إذا لزم الأمر.
تحياتي @norskben
شفرة
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
//Big Text Box
UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)];
detailLabel.tag = 20;
[cell.contentView addSubview:detailLabel];
}
UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];
المحلول
يمكنك تعيين العلامات (الأعداد الصحيحة) إلى طرق العرض المختلفة والاستعلام عن رقم العلامة لمعرفة أي طريقة عرض تسمى الطريقة. ابحث عن خاصية العلامة في العرض:
tag
The receiver’s tag, an integer that you can use to identify view objects in your application.
@property(nonatomic) NSInteger tag
نصائح أخرى
ليس في جهاز التطوير الخاص بي ، ولكن عند إنشاء UITextView ، يجب أن تكون قادرًا على تعيين علامة. أعتقد أنه [MyTextView Settag: X] ؛ حيث x هو عدد صحيح.
ثم ، في استخدام TextViewDidChangeif (textview.tag == x) {
//do something
} else if (textview.tag == y) {
//do something else and so on
}
أتمنى أن يساعد ذلك قليلاً.
تمرر مشاهدات النص إشارة إلى نفسها في كل طريقة مندوب حتى تعرف أي واحد أرسلها. لإجراء اتصال بالخلية ، قمت بتعيين كل طريقة عرض نص tag
خاصية لقيمة مختلفة تتوافق مع صف الخلية التي هم فيها.
إليك سؤال مهم: هل مربعاتك النصية ثابتة ، أو هل يمكن أن تتغير مع مرور الوقت؟ إذا لم يتغيروا (لا يمكن للمستخدم تغيير عدد الخلايا أو إضافة المزيد لاحقًا) ، فيمكنك إعلان حقل نص جديد لكل خلية. لدي شيء مشابه في تطبيقاتي. لديّ مربعان نصين ، واعتمادًا على حقل Textively حاليًا ، يقوم المندوب بشيء مختلف.
إعلان حقول نص منفصلة في رأسك
UITextField *textField1;
UITextField *textField2;
UITextField *textField3;
في طريقة المندوب ، استخدم إذا كانت عبارة عن حظر لمعرفة ما يتغير حقل Text:
if (textField == textField1) {
//do something
} else if (textField == myTextField2) {
//something else
}
لاحظ أن هذا يعمل حقًا فقط إذا كان عرضك ثابتًا.
أتمنى أن يساعدك هذا
أتمنى لك يوماً عظيماً
عندما تبحث عن خلايا UitableView لمصدر الحدث UITextView ، تكرر فقط على الخلايا التي يمكن للمستخدم رؤيتها حاليًا. يمكن الحصول على هذا باستخدام طريقة UitableView التالية:
- (NSArray *)visibleCells