سؤال

لديّ 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top