Форум программистов, компьютерный форум CyberForum.ru

Xamarin

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
#1

Xamarin & UITableViewCell - Xamarin

20.08.2013, 11:54. Просмотров 1159. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Вопросик возник у меня есть класс таблицы с методом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {
            cell = tableView.DequeueReusableCell (cellIdentifier);
 
            // if there are no cells to reuse, create a new one
            if (cell == null)
                cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);
            cell.TextLabel.Text = tableItems[indexPath.Row];
            cell.TextLabel.Lines = 0;
            cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap ;
 
            return cell;
        }
и есть другой класс где на вьюхе размещена еще таблица мне нужно чтобы при переключении switch менялся текст в таблице вот код :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//Switcher Approve / Don't Approve
        public void switchApproveDontApprove()
        {
            tbs = new TableSource ();
            UILabel myText = new UILabel (new RectangleF (100, 325, 135, 20));
            myText.Text = "Don't Approve";
            Console.WriteLine("FlagApprove = " + flagApprove.ToString());
            myText.BackgroundColor = UIColor.White;
 
            UISwitch mySwitch = new UISwitch(new RectangleF(10, 325, 20, 50));
            mySwitch.ThumbTintColor = UIColor.White;
            mySwitch.OnTintColor = UIColor.Green;
            mySwitch.TintColor = UIColor.Red;
            mySwitch.TouchUpInside += (object sender, EventArgs e) => {
                if(mySwitch.On) {
                    flagApprove = true;
                    myText.Text = "Approve";
                    tbs.cell.TextLabel.TextColor = UIColor.Green;// FAIL вываливается ошибка
                    Console.WriteLine("flagApprove = " + flagApprove.ToString());
                }else{
                    flagApprove = false;
                    myText.Text = "Don't Approve";
                    tbs.cell.TextLabel.TextColor = UIColor.Red;// FAIL тут тоже вываливается ошибка
                    Console.WriteLine("flagApprove = " + flagApprove.ToString());
                }
            };
            View.AddSubview (mySwitch);
            View.AddSubview (myText);
        }
но проблема в том что при переключении switch вываливается ошибка "Object reference not set to an instance of an object". Не могу понять в чем проблема( Заранее спасибо за помощь

Добавлено через 34 минуты
инициализировал cell
C#
1
tbs.cell = new UITableViewCell ();
) теперь ошибка не вываливается, но текст почему то все равно черный
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 11:54     Xamarin & UITableViewCell
Посмотрите здесь:

New Xamarin Studio Xamarin
Xamarin Xamarin & UIButton
Xamarin :: c# :: wmi Xamarin
Прямые ссылки на xamarin Xamarin
Xamarin разработчик Xamarin
Xamarin FM or Xamarin
Xamarin Установка Xamarin
C# xamarin Use an existing database Xamarin
Разработчики Xamarin Xamarin
Прожорливый xamarin Xamarin
Установка Xamarin Xamarin
Xamarin Не устанавливается Xamarin

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.08.2013, 12:12     Xamarin & UITableViewCell #2
У вас есть видение то к каким вы экземплярам класса обращаетесь?
Я вот вижу из ваших слов, что дело выглядит так:
У меня есть A, B и я использую C на D, при этом A не меняется. Так и не должно. Они не связаны.

А вообще вы очень плохо описали проблему. Выводы сделать очень сложно. Либо нормально опишите всё, либо выкладывайте код весь, а не кусками.
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
20.08.2013, 14:37  [ТС]     Xamarin & UITableViewCell #3
вот класс History Screen
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
namespace testiOS
{
    public class TableSource : UITableViewSource
    {
        string[] tableItems;
        string cellIdentifier = "TableCell";
        public UITableViewCell cell;
        PostScreen postScreen = new PostScreen ();
 
        public TableSource(string[] items)
        {
            tableItems = items;
        }
 
        public override int RowsInSection(UITableView tableView, int section)
        {
            return tableItems.Length;
        }
 
        public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
            new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
            tableView.DeselectRow (indexPath, true); // normal iOS behaviour is to remove the blue highlight
        }
 
        public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {
            postScreen = new PostScreen ();
            cell = tableView.DequeueReusableCell (cellIdentifier);
 
            // if there are no cells to reuse, create a new one
            if (cell == null)
                cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);
                cell.TextLabel.Text = tableItems[indexPath.Row];
                cell.TextLabel.Lines = 0;
                cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap ;
            if (postScreen.flagApprove == true) {
                cell.TextLabel.TextColor = UIColor.Red;
                Console.WriteLine ("HSflagApprove = " + postScreen.flagApprove.ToString());
            } else {
                Console.WriteLine ("HSflagApprove = "  + postScreen.flagApprove.ToString());
            }
 
                return cell;
        }
    }
 
    public partial class HistoryScreen : UIViewController
    {
        public HistoryScreen () : base ("HistoryScreen", null)
        {
            this.Title = "Hstory";
        }
 
        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();
            // Release any cached data, images, etc that aren't in use.
        }
 
        public void myTable()
        {
            UITableView table;
 
 
            table = new UITableView(View.Bounds); // defaults to Plain style
            string[] tableItems = new string[] {
                "Vegetables",
                "Fruits",
                "Flower Buds",
                "Legumes",
                "Bulbs",
                "Tubers",
                "Vegetables2",
                "Fruits2",
                "Flower Buds2",
                "Legumes2",
                "Bulbs2",
                "Tubers2",
                "Vegetables3",
                "Fruits3",
                "Flower Buds3",
                "Legumes3",
                "Bulbs3",
                "Tubers3"
            };
            table.Source = new TableSource (tableItems);
            Add (table);
        }
 
 
 
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            myTable ();
 
            //switchApproveDontApprove ();
            // Perform any additional setup after loading the view, typically from a nib.
        }
    }
}


а это PostScreen
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Collections.Generic;
 
namespace testiOS
{
    public partial class PostScreen : UIViewController
    {
        bool flagFacebook = false, flagTwitter = false, flagLinkedIn = false;
        List<string> comment_views = new List<string>();
        public bool flagApprove;
    
        public PostScreen () : base ("PostScreen", null)
        {
            this.Title = "Approve";
        }
 
        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();
            // Release any cached data, images, etc that aren't in use.
        }
 
        public void btnClickFB()
        {
            //Default Image Facebook
            btnFaceBook.SetImage (UIImage.FromFile ("facebook_inactive_256x256.png"), UIControlState.Normal);
            btnFaceBook.TouchUpInside += (object sender, EventArgs e) => {
                if (flagFacebook) {
                    flagFacebook = false;
                    btnFaceBook.SetImage (UIImage.FromFile ("facebook_inactive_256x256.png"), UIControlState.Normal);
                    } else {
                    btnFaceBook.SetImage (UIImage.FromFile ("facebook_active_256x256.png"), UIControlState.Normal);
                    flagFacebook = true;
                }
            };
        }
 
        public void btnClickTW()
        {
            //Default Image Twitter
            btnTwitter.SetImage (UIImage.FromFile ("twitter_inactive_256x256.png"), UIControlState.Normal);
            btnTwitter.TouchUpInside += (object sender, EventArgs e) => {
                if (flagTwitter) {
                    flagTwitter = false;
                    btnTwitter.SetImage (UIImage.FromFile ("twitter_inactive_256x256.png"), UIControlState.Normal);
                } else {
                    btnTwitter.SetImage (UIImage.FromFile ("twitter_active_256x256.png"), UIControlState.Normal);
                    flagTwitter = true;
                }
            };
        }
 
        public void btnClickLI()
        {
            //Default Image LinkedIn
            btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_inactive_256x256.png"), UIControlState.Normal);
            btnLinkedIn.TouchUpInside += (object sender, EventArgs e) => {
                if (flagLinkedIn) {
                    flagLinkedIn = false;
                    btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_inactive_256x256.png"), UIControlState.Normal);
                } else {
                    btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_active.png"), UIControlState.Normal);
                    flagLinkedIn = true;
                }
            };
        }
 
        //Incoming Message(Posting App)
        public void incomingMessage()
        {
            UILabel postMessage = new UILabel (new RectangleF (15, 5, 742, 150));
            postMessage.BackgroundColor = UIColor.White;
            View.AddSubview (postMessage);
        }
 
        //Switcher Approve / Don't Approve
        public void switchApproveDontApprove()
        {
            UILabel myText = new UILabel (new RectangleF (100, 325, 135, 20));
            myText.Text = "Don't Approve";
            Console.WriteLine("FlagApprove = " + flagApprove.ToString());
            myText.BackgroundColor = UIColor.White;
 
            UISwitch mySwitch = new UISwitch(new RectangleF(10, 325, 20, 50));
            mySwitch.ThumbTintColor = UIColor.White;
            mySwitch.OnTintColor = UIColor.Green;
            mySwitch.TintColor = UIColor.Red;
 
            mySwitch.TouchUpInside += (object sender, EventArgs e) => {
                if(mySwitch.On) {
                    flagApprove = true;
                    myText.Text = "Approve";
                    Console.WriteLine("PSflagApprove = " + flagApprove.ToString());
                }else{
                    flagApprove = false;
                    myText.Text = "Don't Approve";
                    Console.WriteLine("PSflagApprove = " + flagApprove.ToString());
                }
            };
            View.AddSubview (mySwitch);
            View.AddSubview (myText);
        }
 
        //Add Comment
        public void AddCommentMessage()
        {
            string myUser;
            string myMessage;
 
            myUser = new NSUserDefaults ().StringForKey ("userName");
            myMessage = postView.Text;
 
            comment_views.Add (myUser + "\n" + DateTime.Now.ToString () + "\n" + myMessage);
 
            cellComment.Source = new TableSource(comment_views.ToArray());
        }
 
        //Loading Avatar Image
        public void loadAvatar()
        {
            UIImageView avatar = new UIImageView (UIImage.FromFile("avatar.jpg"));
            avatar.Frame = new RectangleF (650, 290, avatar.Image.CGImage.Width, avatar.Image.CGImage.Height);
            View.AddSubview (avatar);
        }
 
        public override void ViewDidLoad ()
        {
            View.BackgroundColor = UIColor.White;
            //tbs.cell = new UITableViewCell ();
 
            incomingMessage ();
            switchApproveDontApprove ();
 
            base.ViewDidLoad ();
            // Perform any additional setup after loading the view, typically from a nib.
            postView.Layer.BorderWidth = 0.5f;
 
            btnClickFB();
            btnClickTW();
            btnClickLI();
 
            loadAvatar ();
 
            // Comment Setting
            btnComment.AddGestureRecognizer(new UILongPressGestureRecognizer());
            var tapRecognizerComment = new UITapGestureRecognizer();
            tapRecognizerComment.AddTarget(() =>
                                          {
                AddCommentMessage();
                cellComment.ReloadData();
                //method
            });
            tapRecognizerComment.NumberOfTapsRequired = 1;
            this.btnComment.AddGestureRecognizer(tapRecognizerComment); 
        }
    }
}


Добавлено через 1 минуту
на форме PostScreen создается uiswitch ввели что то в текстовое поле переключили switch он выводит в таблицу цвет красный переключили еще раз он выводит в таблицу этот же текст, но зеленым)

Добавлено через 2 часа 18 минут
сделал) но есть вопросик как указать "изменить цвет текста у определенной ячейки"? у UITableViewCell
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.08.2013, 07:22     Xamarin & UITableViewCell #4
Цитата Сообщение от Auron Посмотреть сообщение
сделал) но есть вопросик как указать "изменить цвет текста у определенной ячейки"? у UITableViewCell
У cell есть textLabel.
А у textLabel есть проперти
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
21.08.2013, 11:02  [ТС]     Xamarin & UITableViewCell #5
я и меняю цвет текста TextColor. просто если меняется цвет то у всех сразу, а мне нужно к примеру сменить цвет у определенной ячейки куда я добавляю текст. Т.е. я ввел текст в switch выставил On (цвет зеленый) нажал кнопку "Добавить" он добавил текст с зеленым цветом, потом я написал еще какой то текст в switch выставил Off (цвет красный) нажал кнопку "Добавить" он добавил текст с красным цветом)
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.08.2013, 06:14     Xamarin & UITableViewCell #6
Сохраняйте значение switch в модель(ну или на крайний случай просто массив BOOL для всех switch). И в методе перезагрузки cell в зависимости от того, что по индексу для данного indexPath.row в Вашем массиве ставьте и значение switch, и значение цвета.
А еще читайте документацию. Будет меньше подобных вопросов. И бросайте этот Xamarin. :/
Yandex
Объявления
22.08.2013, 06:14     Xamarin & UITableViewCell
Ответ Создать тему
Опции темы

Текущее время: 12:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru