четверг, 18 апреля 2013 г.

Возня с android'ом или попытки сделать табы внизу экрана

Несколько дней пытался разгадать эту загадку (как сделать табы внизу экрана). Пробовал различные варианты. И, наконец, озарение!
Предыстория.
Хотелось сделать универсальный вариант, без использования deprecated методов и классов.
К тому же на каждый таб предполагалась обработка в отдельных классах. А использование Intent для загрузки классов требует setup'а с LocalActivityManager, который уже устарел.
Основной класс унаследован от FragmentActivity, который не в android.app, а в android.support.v4.app


FragmentTabHost mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

вторник, 5 февраля 2013 г.

iOS разработка или первое знакомство с Objective C

После долгого пропуска решил немного написать. Быть может это пригодится еще кому-нибудь. Сталкиваюсь с информацией, на которую большой спрос в англоязычной части интернета и весьма скудное описание в русскоязычной. Objective C. Это то, с чем мне пришлось познакомиться не так давно. Пока воспоминания свежи напишу, пока разрозненно, потом постараюсь "собрать в кучу". Итак. Кажется, что это C/C++ с небольшими отличиями.
1) вместо обычного расширения  .c или .cpp  - .m
2) вместо #include - #import/
3) вместо class - @interface в заголовочном файле и @implementation в основном. Чем-то такая конструкция напомнила pascal с его модулями unit. Но никак не ожидал подобное увидеть в C.
4) вместо static - "+". для nonstatic (то есть принадлежащих объектам, а не классам) членов - "-".

5) Конкатенация (слияние) строк - отдельная тема для разговора. Конструкции такие, как "string1"."string2" как в php или хотя бы "string1"+"string2" - как в javascript или C# не работают. Самый "простой" (без преобразования типов в NSMutableString или NSArray) вариант - вызов сообщения stringByAppendingString как пример -
NSString *str;
NSString *res;
...
res=[str stringByAppendingString:@"_"];

Второй вариант сцепления строк -

[NSString stringWithFormat:@"%@/%@/%@", one, two, three];
Третий вариант - написание собственной статичной функции:

+ (NSString *) append:(id) first, ...
{
    NSString * result = @"";
    id eachArg;
    va_list alist;
    if(first)
    {
     result = [result stringByAppendingString:first];
     va_start(alist, first);
     while (eachArg = va_arg(alist, id)) 
      result = [result stringByAppendingString:eachArg];
     va_end(alist);
    }
    return result;
}